2017-01-19 182 views
1

我在角度單頁面應用程序中使用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。有沒有解決這個問題的方法?

+0

我想在這裏做一個例子https://jsfiddle.net/ojzdxpt1/10/對我來說,它看起來像最後的狀態它正在工作,但不知道你是如何在一起做這件事,這是很難知道的。您可能在stateProvider中有一些我不知道的衝突狀態 – Ronnie

回答

0

您的代碼有誤。您正在編寫$urlProvider.otherwise('404')。將其更改爲$urlRouterProvider.otherwise('404')。 這應該讓它工作。

0

什麼工作對我來說是去除$urlProvider.otherwise('404'),並有404狀態