gpt4 book ai didi

AngularJS 使用 UI-Router 处理拒绝的响应

转载 作者:行者123 更新时间:2023-12-03 06:49:38 24 4
gpt4 key购买 nike

我有一个服务,它将我的 API 调用包装在 Angular 中:

var ConcernService = {

list: function (items_url) {
var defer = $q.defer();
$http({method: 'GET',
url: api_url + items_url})
.success(function (data, status, headers, config) {
defer.resolve(data, status);
})
.error(function (data, status, headers, config) {
defer.reject(data, status);
});
return defer.promise;
},

然后是我的应用程序配置,带有UI-Router:

    .config(function($stateProvider){

$stateProvider

.state('default', {
url: '/',
resolve: {
tasks: function ($stateParams, ConcernService) {
return ConcernService.list('tasks/').then(
function (tasks) { return tasks; },
function (reason) { return []; }
);
},
...
}
}
});

这是我可以使用的最基本的配置,如果遇到 403404 等,它基本上只是返回一个空对象,我可以在 View 、模板。

我的问题是,获取 View /模板的其他详细信息的最佳方法是什么,例如拒绝原因和状态。它应该在 tasks 对象中返回,还是单独返回?

最佳答案

首先,你的第一段代码有 deferred anti pattern ,让我们解决这个问题:

list: function (items_url) {
return $http.get(api_url + items_url); // $http already returns a promise
},

另请注意,延迟拒绝和履行是单一值,因此您的多个返回值在这里不起作用。

现在,让我们看看路由器。首先,您的第一个履行处理程序是多余的。

.state('default', {
url: '/',
resolve: {
tasks: function ($stateParams, ConcernService) {
return ConcernService.list('tasks/'); // result.data contains the data here
},
...
}

现在,我们面临的问题是如果被拒绝会发生什么?

好吧,听听$stateChangeError:

$rootScope.$on('$stateChangeError', 
function(event, toState, toParams, fromState, fromParams, error){ ... })

在这里,您可以收听拒绝中的更改状态失败。

关于AngularJS 使用 UI-Router 处理拒绝的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23877304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com