Angular UI-Router:$ state.current有时是未定义的

时间:2015-07-31 14:46:00

标签: javascript angularjs angular-ui-router

我在我的角度应用中使用ui.router,在我的导航栏controller(包含在多个模板中)中,我编写了一个简单的console.log($state.current)来测试它的行为。

我注意到,有时候,在重新加载时,状态是未定义的:

Object {name: "", url: "^", views: null, abstract: true}

有时会定义:

Object {url: "/admin", templateUrl: "app/components/admin-dashboard/admin-dashboard.html", controller: "AdminCtrl", controllerAs: "vm", name: "admin-dashboard"}

这种行为的原因可能是什么?如何保证在加载视图时定义我的状态?

1 个答案:

答案 0 :(得分:7)

$state.current中获得正确值的最方法是等待ui-router发出$stateChangeSuccess事件。这是你如何做到的:

在Navbar控制器中:

$rootScope.$on('$stateChangeSuccess', 
function(event, toState, toParams, fromState, fromParams){ 
    event.preventDefault(); 
    console.log($state.current)  // this should now always have a resolved value
})

有关详细信息,请参阅ui-router wiki

为什么会这样做而不仅仅是console.log($state.current)是因为,  $ state.current在路径完全加载后'只有'。当你在没有事件的情况下编写它时,根据你写它的位置,它可能是命中或错过。这就是你得到不一致结果的原因。正是由于这个原因,ui-router提供了一个成功事件,它承诺该路线已经得到了解决。