2013-02-14 35 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; 
});