AngularJS基于每个解析处理API错误

时间:2014-06-13 18:54:14

标签: angularjs angular-ui-router

我正在使用带有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错误,并在全球范围内处理一些错误。

1 个答案:

答案 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就不会发生。