我正在使用带有UI-Router
的AngularJS创建一个单页应用程序,该应用程序调用REST API来获取json数据。
我有app.config
这样:
.state('project', {
url: '/project/:projectId/',
views: {
'main': {
templateUrl: 'partials/project.tmpl.html',
controller: 'ProjectCtrl',
resolve: {
project: function ($stateParams, APIService) {
return APIService.get('projects/', $stateParams.projectId);
},
userprofiles: function (APIService) {
return APIService.list('userprofiles/');
},
}
},
}
})
我正在使用app.run
处理API错误:
.run( function ($http, $cookies, $state, $rootScope) {
$rootScope.$on('$stateChangeError', function (event, toState, toParams, fromState, fromParams, error) {
$state.get('error').error = error;
return $state.go('error');
});
});
现在,这非常有用,我的API中的任何404都可以很容易地归结为error
状态以及相应的控制器和模板。
但是,我想要的是,如果从projects
API端点返回404,我会得到这种行为(因为它是url的一部分),但是如果从{{1返回错误API端点我可以返回,说和空对象,并在控制器中处理该错误。在userprofiles
404的情况下,这404可以被认为是非关键的。
我最好的方法是什么?当我构建这个时,我希望我能够在各自的控制器中处理某些API错误,并在全球范围内处理一些错误。
答案 0 :(得分:0)
我假设APIService
调用返回一个承诺:
userprofiles: function (APIService) {
// return the promise
return APIService.list('userprofiles/').then(function(data){
return data;
},function(){ // and error occurred
return {}; // return empty object on error.
});
}
只要您不将错误返回到已解决的注入属性,$stateChangeError
就不会发生。