路由到组件后不会触发Angular OnInit

时间:2018-06-18 16:50:53

标签: angular angular-routing

我遇到了一个非常奇怪的问题,我以前从未使用过角度路由器。

我使用leaflet plugin来显示与我的基础数据集相关的一些地图标记。为了获得有关这些位置的更多详细信息,单击其中一个标记应通过在URL(detail)中传递相应的数据集ID,将用户路由到另一个名为detail/:id的组件。

但是,在这种情况下,将加载组件并调用构造函数,但实现的OnInit函数不会正常触发。那里什么也没发生。

所有这些也可以在这个stackblitz example中看到。

这是当前版本的Angular(6.0.5)中的已知错误吗? 如果是,是否有解决方法?

提前干杯和谢谢

1 个答案:

答案 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))
        });