【问题标题】:$routeChangeError not called on $q.reject$q.reject 上未调用 $routeChangeError
【发布时间】:2014-08-27 14:25:56
【问题描述】:


我有一个带有 Sails JS 后端的 Angular JS 应用程序,并且在路由内部(在 app.js 中)我有:

.state('app.detail', {
  url: "/detail",
  views: {
    'menuContent' :{
      templateUrl: "templates/detail.html",
      controller: 'UserUpdateCtrl',
      resolve: {
        auth: ["$q", "userData", function($q, userData) {
          var userInfo = userData.getUserInfo();
          if (userInfo) {
            return $q.when(userInfo);
          } else {
            return $q.reject({ authenticated: false });
          }
        }]
      },
    }
  }
})

(这是关注this guide

现在在同一个文件上,我有 $routeChangeError:

.run(function($rootScope) {
  $rootScope.$on("$routeChangeError", function(event, current, previous, eventObj) {
    if (eventObj.authenticated === false) {
      $location.path("/login");
    }
  });

在 chrome 上调试时,我看到该函数已定义,但未调用。
我在这里错过了什么?

【问题讨论】:

  • 也许你没有
  • 很确定你想要$stateChangeError...
  • 好的,它正在调用 $stateChangeError,但 eventObj.authenticated 变量未定义(eventObj:Object {name: "", url: "^", views: null, abstract: true}
  • 假设您使用的是 Angular UI 的路由器而不是官方路由器是否安全?

标签: javascript angularjs sails.js angular-routing


【解决方案1】:

好吧,假设您使用的是 Angular UI 路由器,我相信您只是从官方错误处理程序中错误地翻译了错误处理程序。

来自docs for $state

在转换过程中发生错误时触发。重要的是要注意,如果您的解析函数中有任何错误(javascript 错误、不存在的服务等),它们不会按照传统方式抛出。您必须侦听此 $stateChangeError 事件才能捕获所有错误。

而且这个handler的参数不一样,试试这样:

$rootScope.$on("$stateChangeError", function(event, toState, toParams, fromState, fromParams, error) {
  if (error && !error.authenticated) {
    $location.path("/login");
  }
});

以下是参数的说明,其中重要的粗体显示:

  • event – {Object} – 事件对象。
  • toState – {State} – 转换到的状态。
  • toParams – {Object} – 提供给 toState 的参数。
  • fromState – {State} – 当前状态,过渡前。
  • fromParams – {Object} – 提供给 fromState 的参数。
  • error – {Error} – 解析错误对象。

【讨论】:

  • 一切正常,但 $location.path 由于某种原因没有重定向(如果有帮助,路径部分是正确的)
  • 拜托,你的问题有一个模式,你使用的是 $state 而不是 $location。阅读文档,它可能应该是$state.go() 之类的。
  • 非常感谢,有时 angularjs 让我忘记了基本逻辑是如何工作的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-13
  • 2014-08-18
  • 2017-01-08
  • 2016-05-30
  • 2015-05-16
  • 1970-01-01
  • 2015-09-30
相关资源
最近更新 更多