我有类似以下的路由: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调用时。如果我在该组件中有其他东西,那么在更改路线时不会发生这种情况。
有关如何解决此问题的任何想法?
编辑:Here's a Plunkr显示预期的行为。但是,我使用的前ROUTER_DIRECTIVES
,现在已弃用。
我明白了。但是,我想知道是否没有其他办法。如果我有更复杂的结构,我仍然会遇到同样的问题:黑盒会保留,但其内部的其他静态信息仍会闪烁。我也注意到,只有当我使用HTTP调用时才会发生这种行为。如果我在该组件中有其他东西,在更改路线时它不会闪烁。 – brians69
如果您使用解析警卫,它不应该闪烁,因为在http请求从服务器解析之前,路由不会被加载。 – Rob
也许我做错了什么?我更新了我的Plunker:http://plnkr.co/edit/8l2GwRzhcVKF4xUea55o?p=preview – brians69