在$ q.reject上没有调用$ routeChangeError

时间:2014-07-07 07:16:39

标签: javascript angularjs sails.js angular-routing


我有一个带有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上调试时,我看到函数已定义,但未调用。
我在这里缺少什么?

1 个答案:

答案 0 :(得分:11)

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

来自docs for $state

  

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

此处理程序的参数不同,请尝试以下操作:

$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的参数。
  • 错误 - {错误} - 解决错误对象。