2013-07-31 22 views
1

改變則params的值在我的應用程序使用routeUpdate檢查是否$location.search字符串已發生變化,在我看來據此導航。 像這樣。

$scope.$on('$routeUpdate', function(next, current) {   
    var slide_key = $location.search().slide_key; 
    if (slide_key) 
    $scope.go_to_slide(slide_key);  
}); 

另外請記住,我用reloadOnSearch false來重新加載控制器。

通常我通過改變$location.search觸發此和工作正常

一切工作正常,但存在這樣的情況我想觸發這種行爲不改變搜索參數的情況下。

我試着只是改變搜索參數再次相同的值 - >沒有運氣。

如果我將其更改爲其他值,那麼routeUpdate火災和一切工作正常。

那麼如何在不改變參數值$location.search的情況下手動觸發routeUpdate

+2

你可以爲這個請一個小jsfiddle。這樣調試會更容易。乾杯 – dcodesmith

+1

我想我有關於如何實現這個想法,但我需要一些代碼(控制器也許?),所以我可以看到我的想法如何適合您的代碼。 – dcodesmith

+0

@dcodesmith剛剛完成的工作,要回家,明天你會得到代碼。 –

回答

6

我認爲你是對的,你將不得不手動干預,如果你想觸發一個真實的$routeUpdate事件沒有url更改,影響$location.absUrl()

這個例子觸發$路由更新事件:

<a ng-click="$emit('$locationChangeSuccess','hiya')" href="">update route</a> 
// or the precise broadcast would be: 
// $rootScope.$broadcast('$locationChangeSuccess',$location.absUrl(), $location.absUrl()) 

但是,在當前的代碼,你做什麼用的參數從$routeUpdate,所以你也可以只播出了$routeUpdate假的或替代的事件。

似乎更清潔

其他替代品有不能工作的原因:

$route.reload()總是迫使真正的更新路徑:

https://github.com/angular/angular.js/blob/master/src/ngRoute/route.js#L352 https://github.com/angular/angular.js/blob/master/src/ngRoute/route.js#L415

$location是依靠比較來$browser「因此,如果不改變網址的有意義的部分,您無法真正地開啓它:

https://github.com/angular/angular.js/blob/master/src/ng/location.js#L560

+0

謝謝。 $放射是我正在尋找。應該更好地完成我的作業。儘管我在$ emit上使用了$ routeUpdate並且工作正常。你在小提琴中的例子不適合我。小提琴對我來說真的很難使用,特別是由於插值的變化以及您所修復的問題;-) –

+1

酷!但是,對不起小提琴沒有工作,jsfiddle似乎使用單獨的路徑進行保存和編輯的運行,所以你必須改變之前運行它。 :)它看起來像我們可以使用*更新角度的路徑來繞過它在未來的小提琴:http://jsfiddle.net/BXAM4/6/ – lossleader

相關問題