AngularJS UI-Router obtenir l'état actuel de l'intérieur d'une vue
Considérant les états ci-après, prises à partir de l'interface utilisateur-la documentation du routeur:
.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 "état1":
.controller('State1Ctrl', function () {
});
Est-il construit en fonction pour déterminer, à partir dans le contrôleur ou à l'intérieur du modèle, quel est l'état du contrôleur/modèle est associé?
Par exemple:
.controller('State1Ctrl', function ($state) {
console.log($state.this); //state1
});
Et si il n'y a pas de solution intégrée, comment feriez-vous pour "décorer" $état ou $stateParams, pour contenir cette information?
La seule solution que j'ai trouvé est d'utiliser $état.get() et ensuite trouver l'état avec le contrôleur ou de la valeur de modèle. Cela semble incroyablement bordélique, si.
Vous devez vous connecter pour publier un commentaire.
Ne pouvais pas trouver ce document n'importe où, alors j'ai regardé dans le code source.
Il y a un champ de données nommée $uiView attaché à l'interface utilisateur-pour afficher l'élément, il contient le nom de la vue et de l'état associé. Vous pouvez obtenir cet état comme ceci:
ou même
elem.inheritedData('$uiView').$cfg.viewDecl.$context
. Les données de l'état est également disponible dans$cfg.path
, qui est ce que l'interface utilisateur-sref utilise quand il fait des liens. Voir lastateContext
fonction: github.com/angular-ui/ui-router/blob/1.0.13/src/directives/...Vous pouvez accéder à l'état actuel configuratin de l'objet comme ceci:
Pour plus d'informations, jetez un oeil à la $état de la documentation.
$state.current.name
- mais néanmoins merci pour l'aideVous pouvez le faire comme suit,
Nous pouvons voir ce est défini pour
current
de l'état, à l'aide de la$state.current
, cochez cette exemple montrant:le contrôleur:
vérifier que ici
ÉTENDRE: L'exemple ci-dessus retournera toujours actuelle de l'état - c'est à dire si il y a une hiérarchie de trois membres et nous avons accès le dernier état (
'state1.list.detail'
) directement:Chaque contrôleur sera fournie avec le même état: $état("état1.liste.détail").
Pourquoi? beause cet état a suffisamment d'informations, ce sont tous les points de vue (hiérarchiquement emboîtés) et de leurs contrôleurs requis. Nous pouvons observer que l'ensemble de la
Rapidement discuté ici citer:
MAIS: il n'y a AUCUN moyen, comment obtenir des informations à partir de l'actuel contrôleur
instance
, à qui$state
il appartient! Même les itérations, la recherche par le biais de certains$state.get('stateName')
seront pas fiables, parce que tout simplement il n'y a pas gardé l'égard de cette façon. Un contrôleurClass
pourrait être utilisé pour de nombreux points de vue différentsInstances
. Et aussi, de par mon expérience, je ne me souviens pas de tout cas, quand j'ai besoin de connaître ces informations... que maintenant, il est un peu plus clairCeci est utile si vous êtes à la recherche pour l'Actuel nom de l'etat, $etat.actuel.nom
Pas sûr que c'est la même version, mais sur 0.3.1 vous pouvez l'utiliser pour obtenir l'état actuel:
Et à effectuer une vérification:
De la Documentation:
https://ui-router.github.io/ng1/docs/0.3.1/index.html#/api/ui.router.state.$état
Si vous voulez vérifier l'état actuel
console.log("state", $state.current)
Si vous voulez vérifier le nom de l'état actuel nom
console.log("statename", $state.current.name)
Un groupe de travail "hors de la boîte" Contrôleur à partir de votre code, ce qui montre l'état: