Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度ui路由器onEnter功能未启动_Angularjs_Angular Ui Router - Fatal编程技术网

Angularjs 角度ui路由器onEnter功能未启动

Angularjs 角度ui路由器onEnter功能未启动,angularjs,angular-ui-router,Angularjs,Angular Ui Router,多亏了SO社区的大力帮助,我有了一个工作的angular SPA,它使用库使用多个状态/视图。然而,我得到的行为似乎与angular ui router文档不符 从他们关于的文档中,我希望每当我使用$state.go(“home”),绑定到该状态的config对象的oneter()事件都会启动,但我看不到它会发生。例如: /* myApp module */ var myApp = angular.module('myApp', ['ui.router']) .config(['$statePr

多亏了SO社区的大力帮助,我有了一个工作的angular SPA,它使用库使用多个状态/视图。然而,我得到的行为似乎与
angular ui router
文档不符

从他们关于的文档中,我希望每当我使用
$state.go(“home”)
,绑定到该状态的config对象的
oneter()
事件都会启动,但我看不到它会发生。例如:

/* 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");
});
/*myApp模块*/
var myApp=angular.module('myApp',['ui.router']))
.config(['$stateProvider',函数($stateProvider){
$stateProvider.state('home'{
网址:“/”,
观点:{
“顶部”:{
url:“”,
模板:“top!{{topmsg}}”,
控制器:功能($scope){
$scope.topmsg=“已加载顶部!”;
log(“topctrl!”);
},
onEnter:function(){
log(“已进入底部状态的onEnter函数”);
}
},
“中间”:{
url:“”,
模板:'middle!{{middlemsg}}}',
控制器:功能($scope){
$scope.middlemsg=“已加载中间!”;
log(“中键ctrl!”);
},
onEnter:function(){
log(“已进入底部状态的onEnter函数”);
}
},
“底部”:{
url:“”,
模板:“底部!{{bottommsg}}”,
控制器:功能($scope){
$scope.bottommsg=“已加载的底部!”;
log(“底部ctrl!”);
},
onEnter:function(){
log(“已进入底部状态的onEnter函数”);
}
}
},
onEnter:function(){
控制台日志(“进入主状态”);
}
});
}])
.controller('MyAppCtrl',函数($scope,$state/*,$stateParams*/){
$scope.statename=$state.current.name;
$scope.testmsg=“应用程序范围工作!”;
log(“MyAppCtrl已初始化!”);
$state.go(“回家”);
});
从state的config对象中的所有
onEnter()
调用中可以看到,我的期望是,当home状态加载时,我将开始看到它们触发控制台消息的所有状态/视图的列表。但是,只有从
home
状态的
onEnter
事件中记录的第一条
进入主状态的消息。没有任何其他视图的
onEnter
被命中。我是不是误读了文件

证明。只需在firebug/chrome开发工具中显示控制台,您就会看到控制台输出的缺失

任何帮助都会很好。我正在使用angular 1.2和ui路由器0.2.0。提前谢谢

有两件事:

  • onEnter
    方法适用于状态,而不是视图。您的定义中有一个状态和三个视图,出于某种原因,您尝试将URL附加到视图

  • 为了进入状态,首先必须退出状态。(A) 实际上,您从未离开过
    主页
    状态(因为您只有一个状态定义可以开始),因此您永远无法重新输入它。(B) 看起来您实际上是在尝试在
    home
    中创建子状态。即使修改了语法,它仍然不起作用,因为当您进入父级的子级状态时,通过在同一父级中更改为不同的子级状态,您仍然不会真正离开父级状态,因此不会重新触发
    oneter

我用过

 $state.reload();
触发promise responses中的更新以解决此问题。你也可以

$state.reload()
$state.go("statename")
我就是这样解决的


请参见此处:

调试一个工作示例(即Plunkr)会容易得多。@NateAbele很抱歉花了这么长时间,但任何感兴趣的人都可以使用小提琴。谢谢您也可以考虑使用,而不是使用路由器之一。