В настоящее время у меня есть страница Angular.js, которая позволяет искать и отображать результаты. Пользователь нажимает на результат поиска, а затем нажимает кнопку назад. Я хочу, чтобы результаты поиска снова отображались, но я не могу понять, как запустить поиск. Вот деталь:
- Моя страница Angular.js - это страница поиска с полем поиска и кнопкой поиска. Пользователь может вручную ввести запрос и нажать кнопку, и запрос ajax запускается, и результаты отображаются. Я обновляю URL поисковым запросом. Это все работает отлично.
- Пользователь нажимает на результат поиска и попадает на другую страницу - это тоже хорошо работает.
- Пользователь нажимает кнопку «Назад» и возвращается на мою страницу углового поиска, и отображается правильный URL-адрес, включая условие поиска. Все работает отлично.
- Я связал значение поля поиска с поисковым термином в URL, поэтому он содержит ожидаемый поисковый термин. Все работает отлично.
Как заставить функцию поиска снова выполняться без необходимости нажимать кнопку «Поиск»? Если бы это был jquery, то я бы выполнил функцию в функции documentready. Я не вижу аналога Angular.js.
$routepProvider
? Используйте его для подключения к службе в вашем приложении, которая предоставляет данные для результатов поиска. Не думайте сdocument.ready
точки зрения как с JQuery. Трудно очень помочь, не видя, как у вас есть поиск в настоящее времяОтветы:
С одной стороны, как сказал @ Mark-Rajcok, вы можете просто уйти с частной внутренней функцией:
Также вы можете взглянуть на директиву ng-init . Реализация будет очень похожа на:
Но позаботьтесь об этом, поскольку угловая документация подразумевает (начиная с версии 1.2) НЕ использовать
ng-init
для этого. Однако, это зависит от архитектуры вашего приложения.Я использовал,
ng-init
когда хотел передать значение из серверной части в угловое приложение:источник
myCtrl
контроллер создается и запускается.<div smth on-init="doWhatever()">
. Конечно, это зависит от конкретного случая использования.Попробуй это?
источник
Я никогда не смог
$viewContentLoaded
бы работать для меня, иng-init
действительно должен использоваться только вng-repeat
(согласно документации), а также вызов функции непосредственно в контроллере может вызвать ошибки, если код опирается на элемент, который еще не был определен ,Это то, что я делаю, и это работает для меня:
Если вы не используете
ui-router
. Тогда это:источник
$scope.$on('$routeChangeSuccess'
срабатывает каждый раз, когда параметры в URL меняются ($location
например, через ), и, таким образом, вы можете использовать просто$scope.$on('$locationChangeSuccess'
. Если вам нужен какой-то триггер при загрузке / перезагрузке страницы, вы можете использовать,$scope.$watch('$viewContentLoaded'
как было предложено здесь. Он не будет срабатывать при изменении параметров URL.источник
$scope
а вместо этого работаемthis
.Решение Димитрия / Марка у меня не сработало, но использование функции $ timeout, кажется, работает хорошо, чтобы гарантировать, что ваш код запускается только после того, как разметка отрисована.
Надеюсь, поможет.
источник
Вы можете сделать это, если хотите посмотреть, как изменяется объект DOM viewContentLoaded, а затем что-то сделать. Использование $ scope. $ on тоже работает, но по-разному, особенно если в маршрутизации используется одностраничный режим.
источник
Вы можете использовать объект $ window angular:
источник
Другая альтернатива:
(через https://stackoverflow.com/a/30258904/148412 )
источник
Еще одна альтернатива, если у вас есть контроллер, специфичный для этой страницы:
источник
При использовании $ routeProvider вы можете разрешить .state и загрузить свой сервис. Это означает, что вы собираетесь загрузить Controller и View только после разрешения вашей службы:
UI-маршруты
обслуживание
источник
Нашел Дмитрий Евсеев, ответ довольно полезный.
Случай 1: Использование одних только angularJ:
Чтобы выполнить метод при загрузке страницы, вы можете использовать
ng-init
в представлении и объявить метод init в контроллере, сказав, что использование более тяжелой функции не рекомендуется, согласно угловым документам в ng-init :HTML:
контроллер:
Предупреждение: не используйте этот контроллер для другого представления, предназначенного для другого намерения, так как это также приведет к выполнению там метода поиска.
Случай 2: Использование Ionic:
приведенный выше код будет работать, просто убедитесь, что кэш представления отключен в
route.js
as:route.js
Надеюсь это поможет
источник
cache: false
сделал это для меня - спасибо!У меня была та же проблема, и у меня работало только это решение (оно запускает функцию после полной загрузки DOM). Я использую это для прокрутки на якорь после загрузки страницы:
источник
Вы можете сохранить результаты поиска в общем сервисе, который можно использовать из любого места и который не очищается при переходе на другую страницу, а затем вы можете установить результаты поиска с сохраненными данными для нажатия кнопки «Назад».
Для вашей кнопки
источник
вызовите начальные методы внутри функции собственной инициализации.
источник