2013-12-09 68 views
23

我正在使用狀態來更改表中的數據。 網址的格式爲/zone/:zoneCode
但是,當訪問/zone時,我希望它默認爲某個zoneCode如何使用Angular UI設置默認狀態

這是我的代碼:

.state('zone', 
{ 
    url:'/zone', 
    controller:'ZoneController', 
    templateUrl:'views/zone.html' 
}) 
.state('zone.code', 
{ 
    url:'/:zoneCode', 
    templateUrl:function(stateParams) 
    { 
     return 'views/zone-codes/'+stateParams.zoneCode+'.html'; 
    } 
} 

加載每個子視圖模板包含顯示數據的表。
當URL中不存在zoneCode時,該表不存在,因爲ui-view不知道要加載templateUrl

如何設置父狀態的默認值?

謝謝。

+0

什麼?它甚至不能重複...這個問題是關於爲未映射的URL設置回退,我的問題是關於從控制器更改子狀態。 – Francisc

回答

53

雖然問題已經很老了,但我仍然想提供一個答案,因爲我有同樣的問題。答案可以找到in this Stackoverflow question。要將該答案應用於您的案例:

$urlRouterProvider.when('/zone','/zone/'+zoneCode); 

urlRouterProvider會檢查url是否爲[yoururl]/zone。如果是這種情況,它將重定向到[yoururl]/zone/zoneCode,zoneCode與您指定的一樣。

希望它可以幫助別人!

+0

謝謝,艾弗。 [額外的字符] – Francisc

+1

+1 @IvorG我也看到了一些例子,其中app.config開始'$ urlRouterProvider.otherwise(「/」);'(根據需要更改) – Mawg

+1

也是如果使用這個解決方案,不是抽象的。 https://github.com/angular-ui/ui-router/issues/497 – Noremac

10

您也可以通過重定向到您設置的默認路由來處理不存在的路由。

$urlRouterProvider.otherwise('/'); 

$stateProvider.state("zone", { 
    url: "/", 
    templateUrl: "views/zone.html", 
}); 
相關問題