Angulaire de l'interface utilisateur-routeur onEnter fonction de pas de tir
Grâce à une grande aide de la communauté, j'ai un travail angulaire de la SPA qui utilise plusieurs états/points de vue à l'aide de la l'interface utilisateur du routeur de la bibliothèque. Cependant j'ai un comportement qui semble en contradiction avec la angular-ui-router
de la documentation.
De leurs docs sur onEnter, je m'attends à ce qu'à chaque fois que j'utilise $state.go("home")
, le onEnter()
événement lié à cet état de configuration de l'objet serait le coup d'envoi, mais je ne le vois pas arriver. Exemple:
/* myApp module */
var myApp = angular.module('myApp', ['ui.router'])
.config(['$stateProvider', function ($stateProvider) {
$stateProvider.state('home', {
url: "/",
views: {
'top': {
url: "",
template: '<div>top! {{topmsg}}</div>',
controller: function ($scope) {
$scope.topmsg = "loaded top!";
console.log("top ctrl!");
},
onEnter: function () {
console.log("entered bottom state's onEnter function");
}
},
'middle': {
url: "",
template: '<div>middle! {{middlemsg}}</div>',
controller: function ($scope) {
$scope.middlemsg = "loaded middle!";
console.log("middle ctrl!");
},
onEnter: function () {
console.log("entered bottom state's onEnter function");
}
},
'bottom': {
url: "",
template: '<div>bottom! {{bottommsg}}</div>',
controller: function ($scope) {
$scope.bottommsg = "loaded bottom!";
console.log("bottom ctrl!");
},
onEnter: function () {
console.log("entered bottom state's onEnter function");
}
}
},
onEnter: function () {
console.log("entered home state");
}
});
}])
.controller('MyAppCtrl', function ($scope, $state/*, $stateParams*/) {
$scope.statename = $state.current.name;
$scope.testmsg = "app scope working!";
console.log("MyAppCtrl initialized!");
$state.go("home");
});
Comme vous pouvez le voir à partir de tous les onEnter()
appels dans l'état de configuration de l'objet, tout mon espoir était que lorsque l'état de charge, je voudrais commencer à voir une liste de tous les états/les points de vue qu'ils ont frappé coup d'envoi de leurs messages sur la console. Toutefois, seule la première entered home state
message est enregistré, à partir de la home
de l'état onEnter
événement. Pas un seul autre point de vue, la onEnter
est d'être touché. Suis-je une erreur de lecture de la documentation?
Voici le tant attendu de violon à démontrer. Juste montrer la console de firebug/chrome devtools et vous verrez l'absence de sortie de la console.
Toute aide serait super. Je suis en utilisant angulaire 1.2 et ui-router 0.2.0. Merci à l'avance!
Désolé d'avoir pris autant de temps, mais un violon est disponible à quiconque est intéressé. Merci!
Vous pourriez aussi envisager de travailler avec des $la portée des événements au lieu d'utiliser le routeur.
OriginalL'auteur tengen | 2013-11-14
Vous devez vous connecter pour publier un commentaire.
Deux choses:
La
onEnter
méthode s'applique à états, pas vues. Vous avez dans votre définition d'un état à 3 points de vue, et pour une raison quelconque vous avez tenté de joindre les Url de votre point de vue.Pour qu'un état soit saisi, il doit d'abord être quitté. (A) Vous n'avez jamais réellement quitter le
home
de l'état (puisque vous n'avez qu'une seule définition de l'état pour commencer), de sorte que vous pouvez ne jamais re-saisir. (B) Il semble que vous êtes en train d'essayer de créer de l'enfant, les états à l'intérieur dehome
. Même si vous régler votre la syntaxe, cela ne fonctionne toujours pas, parce que quand vous entrez dans l'état d'enfant d'un parent, par l'évolution d'un enfant différent de l'état dans le même parent, vous avez encore jamais fait de laisser le parent de l'état, donc pas de re-déclenchement deonEnter
.OriginalL'auteur Nate Abele
J'ai utilisé
pour déclencher les mises à jour de la promesse réponses dans mon cas, de résoudre ce problème. Vous pouvez également faire
c'est comment je l'ai résolu.
Voir ici: https://github.com/angular-ui/ui-router/wiki/Quick-Reference#statereload
OriginalL'auteur margarita