Заставить AngularJS перезагрузить маршрут, хотя для параметра reloadOnSearch установлено значение false

В конфигурации маршрута моего приложения AngularJS большинство маршрутов определены с параметром reloadOnSearch, установленным на false, поскольку большую часть времени страница не должна перезагружаться при изменении параметра поиска.

Но в редких случаях мне нужно другое поведение, когда мне нужно перезагрузить URL-адрес, хотя изменились только параметры поиска.

Есть ли способ заставить AngularJS перезагрузить URL-адрес, хотя для reloadOnSearch установлено значение false?


person Flo    schedule 02.10.2013    source источник


Ответы (3)


Я не пробовал, но кое-что, что вы можете попробовать.

В обработчике событий $routeUpdate вызовите метод $route.reload(), если вы знаете условие, которое должно вызвать обновление маршрута.

person Chandermani    schedule 02.10.2013
comment
Что вы имеете в виду под обработчиком событий $routeUpdate, как я могу настроить его поведение или это часть ядра AngularJS? Я не хочу менять сам фреймворк, чтобы потом обновить версию. - person Flo; 02.10.2013
comment
Ах хорошо, теперь я понял, что вы имели в виду. Я должен прослушивать событие $routeUpdate, а затем перезагружаться при необходимости. - person Flo; 02.10.2013
comment
По сути, вы можете сделать $route.reload() в любое время. Когда делать решать вам. Так как вы хотите обновить представление в случае изменения поискового запроса, правильно. Как узнать, что поисковый запрос изменился. Это событие возникает при обновлении поискового запроса. - person Chandermani; 02.10.2013
comment
Было бы полезно, если бы вы включили пример - person Jago; 05.06.2014
comment
Короткая подсказка. Если у вас есть конкретная точка в коде, где вы добавляете параметры поиска к URL-адресу, но они не вызывают перезагрузку из-за наличия reloadOnSearch: false для этого маршрута, как сказал @Chandermani, вы можете выполнять $route.reload() где угодно Вы нуждаетесь в этом. Поэтому просто включите службу $route в качестве зависимости вашего класса и выполните $route.reload() в той конкретной точке, которая вам нужна. - person Alex MM; 21.12.2016

Если вы пытаетесь принудительно выполнить перезагрузку, когда пользователь щелкает ссылку, установите целевой атрибут ссылки. Это вызовет перезагрузку независимо от reloadOnSearch=false

<a href="/same_page?different_param=123" target="_self">Reload</a>
person zavidovych    schedule 13.10.2014
comment
Мужчина! Вы сделали мой день! Это действительно хак, но он прекрасно работает и достаточен для некоторых ограниченных нужд. Спасибо! - person piotr.d; 09.12.2014
comment
Это перезагрузит все приложение, а не только маршрут. Не хакерский способ - использовать ui-sref-opts={reload:true} - person BtnMike; 03.03.2017

это тоже работа

app.controller('appCtrl',function($scope,$window){
           $scope.reload =function(){
               $window.location.reload(); 
           }
})

HTML

<div ng-click="reload()">reload</div>
person Nishchit    schedule 09.10.2013
comment
Хотя вопрос не был сформирован таким образом, чтобы уточнить, хочет ли он перезагрузить маршрут или все приложение, я почти уверен, что он хочет перезагрузить маршрут. Ваше решение повторно инициализирует все приложение. - person epitka; 10.09.2014