我正在尝试处理AngularJS中的http错误(使用ui-router),但在以下代码中丢失了run函数的上下文。
bugtracker.run(['$rootScope', '$state', function($rootScope, $state) {
//at this point $state and $rootScope are defined
$rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {
//at this point $state and $rootScope are undefined
});
}]);
导致$ stateChangeError触发的代码如下。
//main.js
bugtracker.config(['$stateProvider', '$httpProvider', '$compileProvider', function($stateProvider, $httpProvider, $compileProvider) {
//...
$stateProvider.state('projects.show', {
url: '/{projectId:[0-9]{1,8}}',
templateUrl: '/assets/projects/show.html',
controller: 'ProjectShowCtrl',
resolve: bugtracker.controller('ProjectShowCtrl').resolve
});
//...
}]);
//ProjectShowCtrl.js
projectShowCtrl.resolve = {
project: function(Project, $q, $stateParams, $state) {
var deferred = $q.defer();
Project.findById($stateParams.projectId, function(successData) {
deferred.resolve(successData);
}, function(errorData) {
deferred.reject(errorData); // you could optionally pass error data here
});
return deferred.promise;
},
delay: function($q, $timeout) {
var delay = $q.defer();
$timeout(delay.resolve, 1000);
return delay.promise;
}
};
我希望在$ on函数调用的匿名函数中定义$ state,以便我可以将用户重定向到401,403等页面,但我不确定它为什么不是。 在其他示例中,我看到(https://github.com/angular-ui/ui-router/issues/898)暗示$ state是在匿名函数的上下文中定义的。
如果有人能够解释为什么没有定义$ state或者我可以更改它以使其定义我会非常感激!
答案 0 :(得分:4)
除非在运行块中已经未定义,否则这些都不会被定义。但是,我已经看到了调试工具认为某些变量未实际定义的情况。在FireBug中发生了一个旧的FF版本。