Мой routeProvider для маршрута reloadOnSearch установлен на false:
$routeProvider
.when(
"/film/list",
{
templateUrl: '/film/list.html',
controller: FilmListController,
reloadOnSearch: false
}
....
)
Я сделал это, потому что я не хочу, чтобы весь контроллер был перезагружен после изменения строки запроса, но я все еще использую его, и URL-адрес выглядит следующим образом: film/list?sort=isbn&order=asc&offset=0
. Теперь, когда изменяется строка запроса, я хочу вызвать функцию из моего контроллера. Поэтому я попытался настроить $watch в контроллере:
$scope.location = $location;
$scope.$watch( 'location.search()', function( search) {
$scope.list();
});
Но это не работает. Если я устанавливаю $watch для просмотра изменений отдельного параметра строки запроса, то он работает. Но я не хочу устанавливать $watch для каждого параметра моей строки запроса. Теперь я использую следующее:
$scope.location = $location;
$scope.$watch( 'location.url()', function( url ) {
if($location.path() == '/film/list')
$scope.list();
});
Поэтому вместо просмотра для поиска я просматриваю весь URL-адрес, а затем проверяю, является ли путь тем, который я установил в routeProvider, чтобы условно вызвать функцию. То, что мне не нравится в этом решении, заключается в том, что я должен explicilty ввести значение для $location.path для соответствия.
Может ли кто-нибудь предложить лучшее решение и, возможно, объяснить мне, почему $watch не работает для $location.search()?