2013-02-14 68 views
4

我需要類似$routeChangeSuccess的事件,但需要爲$ location.search()變量。我打電話給$ location.search('newview'),並需要知道它何時更改的方法。AngularJS搜索更改事件

謝謝!

+0

的可能重複[AngularJs $收看$ location.search不工作時reloadOnSearch是假的(http://stackoverflow.com/questions/15093916/angularjs-watch-on-location-search-doesnt-work-when-reloadonsearch-is-false) – 2015-02-19 19:37:45

回答

15

你應該使用$scope.$watch

$scope.$watch(function(){ return $location.search() }, function(){ 
    // reaction 
}); 

查看更多有關$watch在角docs

如果您只是想添加'newview',查詢字符串上面的代碼將工作。

即從http://server/pagehttp://server/page?newvalue

不過,如果你正在尋找「NewView的」改變上面的代碼將無法正常工作。

即從http://server/page?newvalue=ahttp://server/page?newvalue=b

您需要使用 'objectEquality' 參數去調用$觀看。這會導致$ watch使用值相等,而不是對象引用相等。

$scope.$watch(function(){ return $location.search() }, function(){ 
    // reaction 
}, true); 

注意添加了第三個參數(true)。

+0

啊,你實際上可以在手錶中使用一個函數。謝謝。 – 2013-02-14 20:23:53

+0

請確保您在$ watch的調用中使用「objectEquality」參數(第3個參數)。沒有這個,它會檢查對象引用是否相等,而不是按值。如果將'newview'添加到查詢字符串中,$ watch可以工作,但如果您更改'newview'的值則不起作用。 – 2014-04-23 13:34:58

+0

我更新了提及objectEquality的答案。 – 2014-04-23 13:43:08

1

你可以在你的控制器監聽$路由更新事件:

$scope.$on('$routeUpdate', function(){ 
    $scope.sort = $location.search().sort; 
    $scope.order = $location.search().order; 
    $scope.offset = $location.search().offset; 
});