2014-02-24 102 views
28

我有一個客戶搜索視圖,默認情況下,只是加載一個表名和姓。但是,它可以將這些參數作爲URL中的參數。我的應用程序配置包含:AngularJS狀態/視圖與ui路由器的「可選」參數

$stateProvider 
     .state({ 
      name:  "search", 
      url:   "/search", 
      templateUrl: "partials/customerSearch.html", 
      controller: "CustomerSearchCtrl" 
     }) 
     .state({ 
      name:  "searchGiven", 
      url:   "/search/:fn/:ln", 
      templateUrl: "partials/customerSearch.html", 
      controller: "CustomerSearchCtrl" 
     }) 

這有效,但它似乎有不必要的冗餘。有沒有更好的辦法?這是$urlRouterProvider應該處理的東西嗎?

回答

25

有關於可選參數的issue in ui-router tracker。截至目前,你可以不以明文方式指定它們,但你可以使用正則表達式:

url: '/search{fn:(?:/[^/]+)?}' 

或查詢參數:

url: '/search?fn&ln' 

人們正在研究它,雖然,所以我期望在未來的某個時候所需的功能。

+1

第一個選項沒有按沒有工作。對於'搜索/約翰/史密斯',我得到'fn =「」'並且沒有'ln'。使用查詢參數似乎會導致參數在另外的狀態/視圖中「粘」到URL,這是不可接受的。 – N13

+10

現在已修復:https://github.com/angular-ui/ui-router/pull/1032 – amcdnl

+2

它可能是固定的,但它不是最新版本(0.2.10),截至2014年6月23日。 –

11

您可以使用:

$stateProvider 
.state({ 
    name:  "searchGiven", 
    url:   "/search/{fn}/{ln}", 
    params: { 
     fn: {value: 'foo'}, 
     ln: {value: 'bar'} 
    }, 
    templateUrl: "partials/customerSearch.html", 
    controller: "CustomerSearchCtrl" 
}) 
+0

它不是可選的,即使我們不需要傳遞任何東西,那麼'... com/search'將不起作用,但我們需要使用'... com /搜索//'哪個不好。 –

3

有更新,你可以這樣做:

$stateProvider.state("foo", { 
    url: "/search/{fn}/{ln}" 
}); 

由於nateabele在有關可選參數的問題,評論說:view here

相關問題