web-dev-qa-db-fra.com

AngularJS UI-Router obtient l'état actuel depuis une vue

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.

22
TaylorMac

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
9
cipak

Vous pouvez accéder à l'objet de configuration d'état actuel comme suit:

$state.current

Pour plus d'informations, consultez la $ state documentation .

57
Himmet Avsar

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

3
Abhijeet

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

1
Marcos