#javascript #angularjs #angular-ui-router
#javascript #angularjs #angular-ui-router
Вопрос:
Я использую маршрутизатор пользовательского интерфейса, теперь я хочу фильтровать данные, используя параметры в url (поисковая часть url), без состояния перезагрузки — мне не нужно запрашивать сервер каждый раз, когда я хочу найти что-то в коллекции.
моя идея состоит в том, чтобы прослушать событие $routeChangeSuccess, взять все параметры поиска и применить угловой фильтр к коллекции с ними.
Я пытался сделать что-то вроде этого
<a ui-sref="invoices.issued({ invoice_type_id: invoiceType.id })" ui-sref-opts="{reload: false}">{{invoiceType.name}}</a>
чтобы изменить URL, например, на ?invoice_type_id=2, но без какого-либо успеха (состояние перезагружается)…
затем я написал свою собственную директиву, которая прослушивает $locationChangeStart и использует reloadOnSearch: false в state provider, но я чувствую, что переписываю функциональность пользовательского интерфейса-маршрутизатора (реакции на странице загрузки с некоторыми установленными параметрами, выделение активной ссылки и т. Д.)
Итак, я хочу спросить, возможно ли это с ui-router? Если я что-то делаю не так? Или есть совершенно другой подход к фильтрации?
Спасибо Blazek
Комментарии:
1. Я бы предложил установить routeParams в переменную и ввести / использовать ее в свой фильтр, а не переписывать кучу модулей.
2. Спасибо, да, я хотел бы это сделать, но я не совсем уверен, как это сделать, потому что параметры пользовательского интерфейса-sref не работают так, как я описал в своем вопросе. Я бы хотел избежать повторной загрузки всей коллекции, есть сотни записей, поэтому я хочу уменьшить использование сервера и фильтровать данные на стороне клиента
3. Похоже, вы хотите создать фильтр / фабрику, ввести в него параметры поиска и передать его обратно контроллеру. Я никогда этого не делал, но этот ресурс может помочь egghead.io/search ? q = фильтры
4. да, что-то вроде этого, но особенно не следует перезагружать состояние при этом действии…
Ответ №1:
Еще один вариант предотвращения перенаправления на ваше состояние:
$transitions.onBefore({}, function($transition$) {
if ($transition$.$to().name === '[state name]') {
return false;
}
});