2012-10-17 41 views
4

是否可以在不觸發相關路由的情況下更改Angular.js中的位置路徑。也許類似以下(不工作密碼):

$location.path("/booking/1234/", {silent: true}) 
+0

爲什麼?你想做什麼? –

+3

我在「/ booking/new /」創建了預訂表單。當預訂被創建並保存時,我希望URL更改爲「/ booking/1234 /」。當路由被觸發時,它具有相同的結果,但它會再次爲資源執行GET並重新初始化控制器。 – DaveJ

回答

1

您可以設置reloadOnSearch假在你的路由器,你可以修改URL的「搜索」的一部分。

這個想法是,你應該設計你的URL方案,以便如果基礎URL更改,它代表一個不同的資源,並應重新加載。如果搜索部分發生更改(?之後的部分,則可能只是更改過濾器或排序順序或其他內容)。

0

是的,它可以使用一種解決方法。

var off = $scope.$on('$stateChangeStart', function (e) { 
      e.preventDefault(); 
      off(); 
      }); 
$location.path("/booking/1234/"); 

它的工作原理是這樣的 - 它是緩存的下一個狀態改變事件 - 讓他不會發生(通過調用「的preventDefault」,然後自稱註銷此事件處理程序)。

僅在Chrome上進行測試。 看到它在這個崗位:https://github.com/angular-ui/ui-router/issues/64

希望它可以幫助

0

這裏是解決方案,角模塊編譯 - https://github.com/garakh/ngSilent 只需要添加的模塊,然後用這樣的方式:

$ngSilentLocation.silent('/new/path/'); 
相關問題