2015-02-11 100 views
6

我正在使用Angular UI路由器,這在大多數情況下運行良好。但是,我有一種情況,我不知道提前查詢字符串參數的名稱。Angular UI路由器 - 允許任何查詢字符串參數

所以通常與UI路由器,你會定義一個路線是這樣的:

$stateProvider.state('test', { 
 
\t url: '/test?testQueryStringParam', 
 
\t templateUrl: 'Test.html', 
 
\t controller: 'TestController' 
 
});

然後在我的控制器使用我$ stateParams可以訪問testQueryStringParam。

但是,在UI路由器中,您無法訪問路由定義中未指定的任何查詢字符串參數。

Angular框架附帶的路由器允許您執行此操作。所以我試圖用我的UI路由器定義使用$ location服務。這確實是一些工作。

當我想添加一個查詢字符串參數使用:

$location.search("paramName", "paramValue");

當我想我只是使用查詢字符串值:

$location.search()

這會更新URL,但不會重新實例化控制器(如$ state.go($ state.current,{},{reload:true})would)。這似乎不是一個大問題,因爲我可以自己重新加載數據。但是,如果您在瀏覽器中使用後退按鈕,它將再次更改URL,但不會重新實例化控制器。

反正是有

  1. 我能得到這個只用UI路由器工作?

  2. 獲得使用$ location實際重新實例化控制器的解決方法。

作爲最後的手段,我也嘗試指導更新window.location,但這刷新整個頁面是不可接受的。

感謝

回答

0

您可以傳遞一個沒有出現在URL

$stateProvider.state('test', { 
    url: '/test?testQueryStringParam', 
    params: { 
    optParam: null, 
    }, 
    templateUrl: 'Test.html', 
    controller: 'TestController' 
}); 

正如你可以看到非URL參數,optParam是用的空默認值的可選參數,並且不會在可見網址

你可以在你的控制器使用訪問此PARAM $stateParams

$stateParams.optParam 

這是有幫助的blog

相關問題