gpt4 book ai didi

AngularJS UI 路由器处理 404s

转载 作者:行者123 更新时间:2023-12-03 22:57:09 25 4
gpt4 key购买 nike

我有一个带有服务的应用程序,它包装了我的 API 调用:

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

我正在使用 UI-Router 在状态之间转换:
concernsApp

.config( function ($stateProvider, $urlRouterProvider) {

$urlRouterProvider.otherwise("/404/");


$stateProvider.state('project', {
url: '/project/:projectId/',
resolve: {
project: function ($stateParams, ConcernService) {
return ConcernService.get('projects/', $stateParams.projectId);
},
},
views: {
...
}
});

我正在不再使用普通的 AngularJS 路由器,而且我很难理解如何实现 404。我可以看到 ConcernServiceconsole.log状态为拒绝,但如何在状态路由器中捕获它?

最佳答案

otherwise()仅当没有其他路由匹配时才会调用规则。你真正想要的是拦截$stateChangeError事件,这是在状态转换中出现问题时触发的事件(例如,解析失败)。您可以在 state change event docs 中阅读更多相关信息。 .

您尝试做的最简单的实现是这样的:

$rootScope.$on('$stateChangeError', function(event) {
$state.go('404');
});

此外,由于 $http本身是建立在 promise 之上的(它是 resolve 解决的),你的 ConcernService方法可以简化为单行(我意识到您出于调试目的对其进行了扩展,但您可以轻松地将其链接起来,仅供引用):
var ConcernService = {

get: function (items_url, objId) {
return $http.get(api_url + items_url + objId);
}
}

关于AngularJS UI 路由器处理 404s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23281351/

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