angularjs – Angular ui-router onEnter函数未触发
感谢SO社区的一些帮助,我有一个工作角度SPA,它使用
ui-router库使用多个状态/视图.但是我得到的行为似乎与angular-ui-router文档不一致.
从他们关于onEnter的文档中,我希望无论何时我使用$state.go(“home”),与该状态的配置对象相关的onEnter()事件都会启动,但我不认为它会发生.例: /* 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!"); },'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"); }); 正如你可以从状态的配置对象中的所有onEnter()调用中看到的那样,我的期望是当家庭状态加载时,我会开始看到他们正在触发控制台消息的所有状态/视图的列表.但是,仅从主状态的onEnter事件中记录第一个输入的本地状态消息.没有一个其他视图的onEnter被击中.我误读了文档吗? Here is a long-awaited fiddle进行演示.只需在firebug / chrome devtools中显示控制台,您就会看到缺少控制台输出. 任何帮助都会很棒.我正在使用角度1.2和ui-router 0.2.0.提前致谢! 解决方法
两件事情:
> onEnter方法适用于状态,而不适用于视图.您在定义中有一个州和三个视图,并且由于某种原因,您尝试将URL附加到您的视图.>为了输入一个州,首先必须退出. (A)你实际上从未离开过主状态(因为你只有一个状态定义开始),所以你永远不能重新输入它. (B)看起来你实际上是想在家里创造儿童状态.即使您修复了语法,它仍然无法工作,因为当您输入父项的子状态时,通过更改为同一父项中的其他子状态,您仍然永远不会实际离开父状态,因此不会重新触发onEnter. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |