gpt4 book ai didi

javascript - 如果另一个 Controller 上的解析失败,则 AngularJS 'otherwise' Controller 不会运行

转载 作者:行者123 更新时间:2023-11-29 19:34:51 25 4
gpt4 key购买 nike

假设我们在配置中定义了路由:

$routeProvider
.when('/person/:person_id', {
controller: 'person',
templateUrl: 'partials/person.html',
resolve: {
data: ['api', '$route',
function(api, $route) {
return api('api/person/page/' + $route.current.params.person_id);
}
]
}
})
.otherwise({
controller: 'error',
templateUrl: 'partials/404.html',
});

此外,我们可以确定所有 Controller 、 View 和 API 端点都存在。

现在,当我们导航到一个不存在的路由时,例如:blahblah/foobar,路由器的行为与我预期的一样:运行“错误” ' Controller ,并显示 404.html

但是,如果当 API 端点返回 404(因为此人不存在)时 /person/:person_id 的解析失败 - Angular 表现出某种不稳定的行为,它既不运行 ' person' Controller ,NOR 'error' Controller ,但正确显示 404 部分。

我想知道如何让 Angular 在解析失败时运行“错误” Controller ,就像路径不存在时一样。

-编辑-

请记住,由于应用程序要求,我无法重定向。

路由器需要停留在错误的 URL 上,而不是重定向到专用的 404 路由。

最佳答案

根据 docs对于 $routeProvider,如果 resolve block 失败,将会有一个 $routeChangeError 事件。您可以为该事件连接一个监听器并手动重定向到错误页面,尽管这需要您向其添加一个 url。

.otherwise ({
url: '/ohmy',
controller: 'error',
templateUrl: 'partials/404.html',
});

在某处,可能在 module.run 函数中

angular.module('myModule').run(['$rootScope', '$location', 
function($rootScope, $location) {
$rootScope.$on('$routeChangeError', function() {
$location.path('/ohmy');
});
}]);

关于javascript - 如果另一个 Controller 上的解析失败,则 AngularJS 'otherwise' Controller 不会运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25636582/

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