我在角度單頁面應用程序中使用ui路由器。我也定義了一些路線,我有這樣一個特定的404路線:在角度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是如何「*路徑」,這意味着它將匹配任何路徑。我做到了這一點,如果用戶輸入類似'/ some-non-existent-url'的東西,他不會被重定向到'/ 404',而是停留在'/ some-non-existent-url',但看到404.html模板。問題來了:假設我的應用程序與我的示例控制器中的一些REST API交互,並且API可能會返回一個對象,或者它可能會返回404 Not Found,它基於它接收的url中的id。所以,我的控制器中,每當出現這種情況,我嘗試重定向到404:
app.controller('ExampleController', function($state){
someAPICall().then(function(response){ // do something},
function(response){
if(response.status == 404){
$state.go('404');
}
});
});
這是怪異的員工發生。它顯示了404.html模板 - 一秒鐘 - 然後重定向到主頁(爲了簡潔起見,沒有在我的代碼中包含它)。我的猜測是,'404'狀態沒有指定真正的URL:如果我將它的URL從'* path'更改爲'/ 404',例如,這工作正常,但我不想這樣做,因爲用戶將不會看到哪個是導致404響應的真實URL。有沒有解決這個問題的方法?
我想在這裏做一個例子https://jsfiddle.net/ojzdxpt1/10/對我來說,它看起來像最後的狀態它正在工作,但不知道你是如何在一起做這件事,這是很難知道的。您可能在stateProvider中有一些我不知道的衝突狀態 – Ronnie