我遇到了一个非常奇怪的问题,我以前从未使用过角度路由器。
我使用leaflet plugin来显示与我的基础数据集相关的一些地图标记。为了获得有关这些位置的更多详细信息,单击其中一个标记应通过在URL(detail
)中传递相应的数据集ID,将用户路由到另一个名为detail/:id
的组件。
但是,在这种情况下,将加载组件并调用构造函数,但实现的OnInit
函数不会正常触发。那里什么也没发生。
所有这些也可以在这个stackblitz example中看到。
这是当前版本的Angular(6.0.5)中的已知错误吗? 如果是,是否有解决方法?
提前干杯和谢谢
答案 0 :(得分:5)
单击标记会在NgZone外部运行逻辑,以防止发生更改检测。您需要手动运行它。
将NgZone
注入MapComponent
export class MapComponent {
...
constructor(private router: Router, private ngZone: NgZone) {...}
然后改变
marker_label.on('click', (event: MouseEvent) => {
const link = ['detail', id];
this.router.navigate(link);
});
到
marker_label.on('click', (event: MouseEvent) => {
const link = ['detail', id];
this.ngZone.run(() => this.router.navigate(link))
});