javascript - Angular UI-Router : $state. 当前有时未定义

标签 javascript angularjs angular-ui-router

我在我的 Angular 应用程序中使用 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"}

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

最佳答案

$state.current 中获取正确值的最可靠方法是等待 ui-router 触发 $stateChangeSuccess 事件。方法如下:

在你的导航栏 Controller 中:

$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 提供了一个成功事件,它 promise 路由肯定已经被解析。

关于javascript - Angular UI-Router : $state. 当前有时未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31749045/

相关文章:

javascript - 如何从 Firebase 的 JavaScript 查询创建复选框列表

javascript - 以编程方式加载后 onChange 事件错误触发

javascript - 使用 yo Angular :factory test fails to load testProvider 创建服务

javascript - 如何使用 angular-ui-router 重新加载状态?

javascript - 反序列化 JSON 对象时,有没有办法将属性名称转换为小写?

javascript - 覆盖 Webbrowser 控件上的 window.location

javascript - 'chunked' 响应进入 AngularJS 后立即显示的方法是什么?

javascript - AngularJS 应用程序中的资源脚本应该是相对的还是绝对的?

AngularJS ui-router 无法加载 templateUrl

javascript - ui-sref - 没有 <a> 标签的新标签