Considérant les états suivants extraits de la documentation du routeur ui:
.state('state1', {
url: '/state1',
templateUrl: 'partials/state1.html'
controller: 'State1Ctrl'
})
.state('state1.list', {
url: '/list',
templateUrl: 'partials/state1.list.html',
})
Et le contrôleur pour "partials/state1.html" pour l'état "state1":
.controller('State1Ctrl', function () {
});
Existe-t-il une fonctionnalité intégrée permettant de déterminer, dans le contrôleur ou dans le modèle, à quel état le contrôleur/modèle est associé?
Par exemple:
.controller('State1Ctrl', function ($state) {
console.log($state.this); // state1
});
Et s'il n'y a pas de solution intégrée, comment "décorer" $ state ou $ stateParams, pour contenir cette information?
La seule solution que j'ai trouvée consiste à utiliser $ state.get (), puis à trouver l'état avec la valeur du contrôleur ou du modèle. Cela semble incroyablement compliqué, cependant.
Ne pouvant trouver cela documenté nulle part, j'ai donc cherché dans le code source.
Un champ de données nommé $ uiView est associé à l'élément ui-view. Il contient le nom de la vue et l'état associé. Vous pouvez obtenir cet état comme ceci:
elem.closest('[ui-view]').data('$uiView').state
ou même
elem.inheritedData('$uiView').state
Vous pouvez accéder à l'objet de configuration d'état actuel comme suit:
$state.current
Pour plus d'informations, consultez la $ state documentation .
Vous pouvez le faire comme suit,
$state.current.name //Return the name of current state
Ceci est utile si vous recherchez le nom de l'état actuel, $ state.current.name
Pas sûr que ce soit la même version, mais sur 0.3.1, vous pouvez l'utiliser pour obtenir l'état actuel:
$state.$current.name
Et pour effectuer un contrôle:
$state.is('contact.details.item');
Documentation: https://ui-router.github.io/ng1/docs/0.3.1/index.html#/api/ui.router.state . $ State