Мне нужно событие, например $routeChangeSuccess
, но для переменной $ location.search(). Я называю $ location.search ('newview'), и мне нужен способ узнать, когда он изменится.AngularJS Search Change Event
Спасибо!
Мне нужно событие, например $routeChangeSuccess
, но для переменной $ location.search(). Я называю $ location.search ('newview'), и мне нужен способ узнать, когда он изменится.AngularJS Search Change Event
Спасибо!
Вы должны использовать $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).
Ах, вы можете фактически использовать функцию в часах. Благодарю. –
убедитесь, что вы используете параметр «objectEquality» (третий аргумент) в вызове $ watch. Без этого он проверяет равенство ссылки на объект, а не на значение. $ Watch будет работать, если «newview» будет добавлен в querystring, но не будет работать, если вы измените значение «newview» –
. Я обновил ответ, указав objectEquality. –
Вы можете слушать $ RouteUpdate события в контроллере:
$scope.$on('$routeUpdate', function(){
$scope.sort = $location.search().sort;
$scope.order = $location.search().order;
$scope.offset = $location.search().offset;
});
возможно дубликат [AngularJs $ смотреть на $ location.search не работает, когда reloadOnSearch ложно] (http://stackoverflow.com/questions/15093916/angularjs-watch-on-location-search-doesnt-work-when-reloadonsearch-is-false) –