#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. Вам понадобится переменная, которая «выключает и включает компонент». Если значения переменных изменились до этого выключения / включения, они будут отображены при повторном включении представления.