2013-02-14 5 views
4

Мне нужно событие, например $routeChangeSuccess, но для переменной $ location.search(). Я называю $ location.search ('newview'), и мне нужен способ узнать, когда он изменится.AngularJS Search Change Event

Спасибо!

+0

возможно дубликат [AngularJs $ смотреть на $ location.search не работает, когда reloadOnSearch ложно] (http://stackoverflow.com/questions/15093916/angularjs-watch-on-location-search-doesnt-work-when-reloadonsearch-is-false) –

ответ

15

Вы должны использовать $scope.$watch:

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

Подробнее о $watch в угловых docs.

Если вы просто ищете дополнение 'newview', к строке запроса будет работать вышеуказанный код.

т.е. от http://server/page до http://server/page?newvalue

Однако, если вы ищете изменения в «» NewView выше код не будет работать.

от http://server/page?newvalue=a т.е. до http://server/page?newvalue=b

Вам нужно будет использовать 'параметров objectEquality' на призыв $ смотреть. Это заставляет $ watch использовать равенство ценности, а не равенство ссылки на объект.

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

Обратите внимание на добавление третьего параметра (true).

+0

Ах, вы можете фактически использовать функцию в часах. Благодарю. –

+0

убедитесь, что вы используете параметр «objectEquality» (третий аргумент) в вызове $ watch. Без этого он проверяет равенство ссылки на объект, а не на значение. $ Watch будет работать, если «newview» будет добавлен в querystring, но не будет работать, если вы измените значение «newview» –

+0

. Я обновил ответ, указав objectEquality. –

1

Вы можете слушать $ RouteUpdate события в контроллере:

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