Состояние перезагрузки без обновления пользовательского интерфейса-маршрутизатор

#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;
 }
});