Принудительно использовать Angular2 для перезагрузки компонента при навигации

#angular #angular2-routing

#angular #angular2-маршрутизация

Вопрос:

В Angular2 RC1 и ниже вызов route link всегда приводит к перезагрузке компонента:

 <a [routerLink]="['/page', {id: 1}]">A link </a>
  

Используя Angular2, none RC, компонент не перезагружается, если он переходит к самому себе с другими параметрами. Есть ли какой-либо способ вернуть поведение перезагрузки?

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

Комментарии:

1. Это не поддерживается в новом маршрутизаторе, но я видел обсуждения о планах поддержки этого в конечном итоге.

2. Как вы этого добились?

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

Ответ №1:

Хотя вы упомянули ‘ActivatedRoute’ и то, как это усложнит ваш код, я думаю, что это поможет другим людям, которые сталкиваются с этой проблемой, когда они обращаются к вашему вопросу, как и я 🙂 .

В этом разделе будет дан ответ на ваш вопрос.

Приведенный ниже код (вставлен из темы выше) — это то, где происходит «волшебство». Если вы поместите свой код ‘reload’ в эту вспомогательную функцию, ваш компонент перезагрузится.

 ngOnInit() {
   this.sub = this.route.params.subscribe(params => {
      this.id =  params['id']; // ( ) converts string 'id' to a number
      // Some 'reload' coding
      // In a real app: dispatch action to load the details here.
   }); 
}
  

Ответ №2:

Простой способ сделать это — принудительно перезагрузить шаблон с помощью *ngIf. Вам понадобится переменная, которая «выключает и включает компонент». Если значения переменных изменились до этого выключения / включения, они будут отображены при повторном включении представления.