Я пытаюсь написать приложение, которое применяет фильтры к списку данных. Я храню фильтры в URL-адресе, чтобы обеспечить глубокую привязку к предварительно заданным значениям. Код ниже - от filters.component.ts
- считывает и обрабатывает URL-адрес при загрузке и обновляет URL-адрес изменений в фильтрах (через элементы формы).Увлажняющее приложение ngrx из URL-параметров
Моя проблема заключается в том, что при загрузке приложения вызывается ngOnChanges
со значением начальной загрузки состояния ngrx. Это соответствует URL-адресу «/», и мой код вызывает навигацию, которая перезаписывает все, что могло быть в URL-адресе.
У меня есть это с помощью if-утверждения ниже, но поскольку это хакки, я боюсь, что сделал более фундаментальный выбор дизайна и приветствовал бы рекомендации сделать это более идиоматично - я думаю, это означает, что это означает , как можно Я увлажняю приложение с данными с маршрутизатора?.
ngOnInit() {
this.route.params.forEach((params: Params) => {
this.action.next({
type: NEW_FILTERS,
payload: fromUrl(params['filter'])
})
});
}
ngOnChanges(changes: SimpleChanges) {
if (typeof changes['filters'].previousValue.budget != 'undefined') {
this.cmpFilters = Object.assign({}, this.filters);
let link = ['/recommendations', toUrl(this.cmpFilters)];
this.router.navigate(link);
}
}
Спасибо, как вы обратите внимание, это не затрагивает ли более глубокое понимание угловой самонастройки может быть применена –
Да, но это удалить «Hacky» часть вашего решения. Очень часто используется оператор if для игнорирования вызовов в ngOnChanges. Они используют этот шаблон во всем исходном коде. Вот один пример: https://github.com/angular/angular/blob/master/modules/%40angular/router/src/directives/router_link_active.ts#L107 – Luiz