2015-11-03 93 views
1

我目前正在開發一個用於管理用戶身份的SPA。我現在有一個問題,爲角度ui路由器中的狀態定義URL。AngularJS ui路由器:帶參數和無參數的URL

這是我想通了,至今:

.state('identity', { 
     url: '/identity/:serialNumber', 
     templateUrl: 'app/components/Identity/identity.html', 
     controller: 'identityController' 
    }) 
    .state('addidentity', { 
     url: '/identity/add', 
     templateUrl: 'app/components/Identity/identityAdd.html', 
     controller: 'identityController' 
    }); 

的第一狀態( 「身份」)獲得通過URL放慢參數 「SERIALNUMBER」。這工作正常,我可以訪問「identityController」內的參數。

我想用第二個狀態(「addidentity」)實現的是,對於訪問「/ identity/add」的特殊情況,我想重定向到不同的模板(也許使用不同的控制器未來)。

但是,這不起作用。只有第一個狀態。第二個被忽略。據我所知,問題是,即使我訪問「/身份/添加」,這個URL在技術上仍然符合第一個狀態。在這種情況下,狀態參數「serialNumber」將簡單地設置爲「add」。

我想我有一個問題,理解ui路由器的工作原理。 有沒有在ui路由器中處理這兩個URL的方法不同?

也許在我想到這個方面有一些根本性的錯誤。任何幫助,將不勝感激:)

問候,

蒂莫

+0

你能提供更多文件嗎?特別是html文件和控制器 – uksz

+0

除了console.log($ stateParams.serialNumber);'外,控制器中沒有任何東西。我還沒有開始實施更多的功能。 – Timo

+0

通過改變映射它會像'/ identity/find /:serialNumber'一樣工作 –

回答

0

您可以驗證的URL與正則表達式: https://github.com/angular-ui/ui-router/wiki/URL-Routing#regex-parameters

例如如果您的序列號是一個整數,下面將使URL只匹配整數:

.state('identity', { 
    url: '/identity/{serialNumber:[0-9]{1,8}}', 
    templateUrl: 'app/components/Identity/identity.html', 
    controller: 'identityController' 
}) 
.state('addidentity', { 
    url: '/identity/add', 
    templateUrl: 'app/components/Identity/identityAdd.html', 
    controller: 'identityController' 
}); 
+0

那就是它!謝謝。 因爲serialNumber總是一個整數值,所以這個效果很好。 – Timo