AngularJS在每个解析的基础上处理API错误
我正在使用AngularJS和AngularJS在每个解析的基础上处理API错误,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我正在使用AngularJS和UIRouter制作一个单页应用程序,调用RESTAPI获取json数据 我有一个像这样的app.config: .state('project', { url: '/project/:projectId/', views: { 'main': { templateUrl: 'partials/project.tmpl.html', controller: 'ProjectCtrl',
UIRouter
制作一个单页应用程序,调用RESTAPI获取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/');
},
}
},
}
})
我正在使用应用程序处理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表单都可以很容易地隐藏到错误
状态以及相应的控制器和模板中
然而,我想要的是,如果从projects
API端点返回404,我会得到这种行为(因为它是url的一部分),但是如果从userprofiles
API端点返回错误,我可以返回,比如说,空对象,并在控制器中处理该错误。如果项目将是404,则可以认为该404是非关键的
我最好的方法是什么?当我构建此功能时,我希望能够处理其各自控制器中的某些API错误,以及一些全局级别的错误。我在这里假设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
就不会发生