2016-09-05 5 views
5

Я модернизировал Угловой 2 с использованием маршрутизатора с надписью «лишенный» и начал использовать «новый» маршрутизатор в rc5 и rc6. Однако теперь у меня проблема (запущена в rc5 и все еще такая же в rc6), где есть компонент, который должен перейти к одному и тому же компоненту, но с разными параметрами (для получения других данных, то есть тот, который находится в представлении allready, на основе по параметрам).Угловой 2 маршрут к тому же компоненту

В личном маршрутизаторе, конструкторе и AfterViewInit и т. Д., Который вызывается каждый раз при навигации по компоненту с this.router.navigate. В новом маршрутизаторе конструктор и другие вещи не вызываются при вызове одного и того же компонента снова друг за другом. Поэтому я предполагаю, что происходит какое-то «волшебное»/кеширование. Также обратите внимание, что в компонент я отправляю один требуемый параметр и несколько необязательных параметров, поэтому ссылка выглядит примерно так: http://localhost:2222/mycomponent/1;someotherparam=123

Есть ли способ заставить компонент получать его при каждом переходе на него?

+0

Не очень хороший ответ, но я не уверен, что вы правильно используете ng2. Вам не следует направлять один и тот же компонент с разными URL-адресами. Используйте внутренние изменения состояния для управления вашим компонентом. Если вам просто нужен URL-адрес для изменения, ознакомьтесь с этим ответом: http://stackoverflow.com/questions/35618463/change-route-params-without-reloading-in-angular-2/39322473#39322473 –

+0

Мне нужно подчеркнуть что навигационный код, поскольку он теперь работает на старом маршрутизаторе, который теперь лишен/удален. Он долгое время работал во многих версиях Angular 2, но проблема связана с новым маршрутизатором. Мне нужно, чтобы он мог перемещаться вперед и назад также с помощью кнопки «назад/вперед», и правильные данные загружаются на основе параметров URL. Просто изменение URL-адреса не работает для меня в моей ситуации (например, когда пользователь нажимает кнопки «назад/вперед», данные необходимо перезагрузить для компонента). – alexsoftware

+1

Теперь я считаю, что это ошибка с угловым 2-роутером. Когда новый маршрут (даже когда тот же компонент), компонент должен быть построен снова. Я получил обходное решение, добавив его в конструктор компонента: router.events.subscribe ((event: Event) => { if (event instanceof NavigationEnd) {// Загрузка данных на основе параметров в ActivatedRoute}}) ; Это позволит подобрать при изменении маршрута и загрузить данные на основе этого. – alexsoftware

ответ

5

Посмотрите на Rangle.io guide для углового 2.

В частности раздел на Reading Параметры маршрута

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

Так что ваш компонент не будет воссоздан, но вы можете подписаться на изменения в части маршрута, которые вы заинтересованы в (params, data, fragment, queryParams) и вызывать эти методы инициализации, как ваш subscribe() обратного вызова.

Смежные вопросы