我有一个带有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上调试时,我看到函数已定义,但未调用。
我在这里缺少什么?
答案 0 :(得分:11)
好的,假设您正在使用Angular UI路由器,我相信您只是错误地从官方路由器中翻译错误处理程序。
转换期间发生错误时触发。重要的是要注意,如果您的解析函数(javascript错误,不存在的服务等)中有任何错误,它们将不会传统抛出。您必须侦听此$ stateChangeError事件以捕获所有错误。
此处理程序的参数不同,请尝试以下操作:
$rootScope.$on("$stateChangeError", function(event, toState, toParams, fromState, fromParams, error) {
if (error && !error.authenticated) {
$location.path("/login");
}
});
以下是重要的参数说明: