假设我们在配置中定义了路由:
$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',
});
此外,我们可以确定所有控制器,视图和API端点都存在。
现在,当我们导航到不存在的路由时,例如:blahblah/foobar
,路由器的行为与我期望的一样:运行'错误'控制器,并显示 404.html
但是,如果API端点返回404时/person/:person_id
的分辨率失败(因为该人不存在) - Angular表现出一种有些不稳定的行为,它既不会运行'人'控制器,也不会运行'错误'控制器,但正确显示404部分。
我想知道如何在解析失败时让Angular运行'错误'控制器,就像路径不存在时一样。
- 编辑 -
请记住,由于应用程序要求,我无法重定向。
路由器需要保留错误的URL,而不是重定向到专用的404路由。
答案 0 :(得分:3)
根据$routeProvider
的{{3}},如果解析阻止失败,则会有$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');
});
}]);