我正在使用的角度单页应用程序的UI路由器。 我有一些路线定义,我有这样一个特定的404路线:
app.config(function($urlRouterProvider, $stateProvider){
$urlProvider.otherwise('404')
$stateProvider
.state('example', {
url: '/example/:id',
templateUrl: 'example.html',
controller: 'ExampleController'
})
.state('404', {
url: '*path',
templateUrl: '404.html'
})
})
注意为404状态的URL是如何“*路径”,这意味着它将匹配任何路径。 我做到了,所以如果用户键入的东西像“/一些-不存在的URL”他不会被重定向到“/ 404”,而是留在“/一些-不存在的URL”,但见404.html模板。 这里谈到的问题:说我的应用程序我ExampleController里面的一些REST API进行交互,而API可能会返回一个对象,或者它可能会返回404基于自收到网址的ID 未找到 。 所以,我的控制器中,每当出现这种情况,我尝试重定向到404:
app.controller('ExampleController', function($state){
someAPICall().then(function(response){ // do something},
function(response){
if(response.status == 404){
$state.go('404');
}
});
});
这是怪异的员工发生。 它显示了404.html模板 - 一秒钟 - 然后重定向到主页(不包括它在我的代码这里简洁起见)。 我的猜测是,规定一个真正的url“404”状态没有:如果我改变它从“*路径”到“/ 404”例如URL,这工作得很好,但我不想这样做,因为用户将不会看到这是导致404响应真实的URL。 是否有此问题的任何解决方法吗?