Централизованный или распределенный подход при обработке URL-перезаписи в angular - PullRequest
0 голосов
/ 08 мая 2020

Короткий вопрос: плохо ли иметь несколько вызовов router.navigate подряд? Если ваш ответ утвердительный, это хуже, чем наличие класса monolyth, который заботится о исправлении URL-адреса?

URL-адрес строится следующим образом: documents / entry /: entryId? FilterparamA = a & filterparamB = 2 & filterparamC = c

У меня есть приложение angular, в котором есть несколько компонентов, влияющих на URL-адрес. Однако, когда параметры URL-адреса меняются, мне нужно проверить, действительна ли комбинация параметров. У меня есть список элементов, которые фильтруются по разным параметрам, нужно выбрать первый элемент. Если параметры фильтра изменяются, то выбор необходимо обновить. В противном случае я мог бы выделить элемент, который в настоящее время не отображается. Также фильтры имеют иерархию, но могут быть изменены независимо в любое время.

Я вижу два подхода: Первый - создать одну службу, для которой все источники сообщают об изменениях. Затем служба проверяет источники в правильном порядке и выбирает первый документ. Проблема в том, что сервис может быстро стать большим и трудным для понимания, требуя дополнений с каждой новой функцией фильтрации, добавляемой в приложение.

Другой подход - позволить каждому компоненту использовать маршрутизатор для обновить URL-адрес. Это хорошо, потому что каждый компонент обрабатывает только свой домен. Что плохо: мы не сможем сохранить действующий URL-адрес в целом, и, возможно, придется выполнить одну итерацию для каждого компонента. Это означает, что мы очень быстро вызовем router.navigate несколько раз подряд, пока URL-адрес не станет действительным. Также взаимодействие в целом нигде явно не записано.

Как вы решаете такого рода проблемы?

...