2017-01-02 2 views
0

В angularjs 1.x с модулем Ui Router я мог подписаться на изменения состояния/маршрута в ОДИН класс, например app.js, когда маршрут от ЛЮБОГО состояния/контроллера изменился.Имеет ли глобальное изменение маршрута в угловом компоненте, ориентированном на компоненты 2

Как можно импонировать. такое же поведение с ng2?

Я хочу просто ONE подписаться на route.params в ONE классе, где я могу проверить URL, а затем решить, что делать.

Я думал, что app.component.ts - это подходящее место для него, но изменение маршрута происходит только тогда, когда вся страница реферируется!

Или возможно, что компонент может иметь базовый класс, где я могу реализовать базовую функциональность всего один раз? Это только мне пришло в голову ...

ответ

0

Это не так просто. Не каждый маршрут должен иметь определенный параметр. Вы можете создать маршрутизируемый компонент, который добавляется маршрутом, где этот параметр определен, и сделать все остальные маршруты дочерними маршрутами этого маршрута. Затем добавьте подписки к параметру в этот верхний маршрутизируемый компонент.

Другим подходом было бы подписаться на события маршрутизатора, как описано в Angular 2 router event listener, а затем прочитать параметры из состояния маршрутизатора первого детского маршрута.

+0

Подход1 не будет работать для меня, поскольку у меня нет детальных маршрутов, технически видимых. У меня есть представление списка проектов, где вы открываете проект, а затем погружаетесь в остальную часть данных с большим количеством боковых представлений. Но на маршруте проектов нет собственности для детей! Но я вижу, что это будет иметь несколько достижений, и я действительно думаю о том, чтобы перепроектировать страницу моих проектов как родителя. Подход 2 был бы ужасным, если бы подписался на NavEnd и Nav start в каждом компоненте. Я только что прочитал, что ng2.3 поддерживает полное наследование компонентов: https://scotch.io/tutorials/component-inheritance-in-angular-2 – Pascal

+0

... что могло бы облегчить работу всего подписчика. Чем больше я думаю о подходе родителей/детей, тем больше я не понимаю, почему в прошлом я так много боролся с этим. Кажется, все о понимании вещей по прошествии времени ;-) – Pascal

0

Попробуйте следующее: 1) создайте услугу route-log.service.ts и введите Router и выполните регистрацию. 2) укажите route-log.service.ts в своем приложении.module.ts.

+0

Можете ли вы подробнее объяснить? Я не вижу, как это соответствует моему вопросу :-) – Pascal

+0

Это сервис, который вводится в app.module.ts (root), поэтому он запускается после запуска приложения. И вы можете ввести Router в эту услугу, чтобы «подписаться на изменения состояния/маршрута». – Timathon