У меня есть маршрут следующим образом: page/:id
, где он загружает различное содержимое для каждого id
. Однако каждый раз, когда я перехожу на другую страницу, он перезагружает весь контент. Я хотел бы перезагрузить только данные, поступающие из API.Остановить перезагрузку всего содержимого при изменении маршрута
Навигация:
<ul>
<li [routerLink]="['/page', 1]">Page 1</li>
<li [routerLink]="['/page', 2]">Page 2</li>
<li [routerLink]="['/page', 3]">Page 3</li>
</ul>
Шаблон: <h1 *ngIf="data">{{data.name}}</h1>
Компонент:
export class DataComponent implements OnInit {
data: any;
error: any;
constructor(
private route: ActivatedRoute,
private service: DataService
) {}
ngOnInit() {
this.getData();
}
getData() {
this.service.getData()
.subscribe(
res => this.data = res,
error => this.error = error
);
}
}
Если вы идете к этому Plunker, вы увидите черный прямоугольник мигает каждый раз, когда изменяется маршрут , В идеальном случае черная часть осталась бы неповрежденной, только внутренние данные изменились бы.
Я также заметил, что это мерцающее поведение происходит, только если я использую HTTP-вызов. Если бы у меня были другие вещи в этом компоненте, это не произошло бы при смене маршрутов.
Любые идеи о том, как это решить?
EDIT: Here's a Plunkr, показывающий ожидаемое поведение. Тем не менее, я использовал бывшие ROUTER_DIRECTIVES
, которые теперь устарели.
Я вижу. Однако, интересно, нет ли другого пути. Если у меня будет более сложная структура, у меня будет такая же проблема: черный ящик останется, но другая статическая информация внутри него все равно будет мерцать. Я также заметил, что это происходит, только если я использую HTTP-вызов. Если бы у меня были другие вещи в этом компоненте, он не мерцал при смене маршрутов. – brians69
Он не должен мерцать, если вы используете защиту разрешения, потому что маршрут не загружается до тех пор, пока HTTP-запрос не будет разрешен с сервера. – Rob
Может быть, я что-то делаю неправильно? Я обновил свой плункер: http://plnkr.co/edit/8l2GwRzhcVKF4xUea55o?p=preview – brians69