我已经实施了以下控制台输出,以跟踪已执行的内容以及未执行的操作。 / dataList 下的页面代码。
export class DataList implements OnInit {
constructor(private service: DataService) {
console.log("constructed");
}
ngOnInit() {
console.log("inited");
...
}
}
现在,它通过输入URL ,在控制台中同时提供输出(即构造和 inited ) >以及使用从其他页面进行路由访问页面时,如下所示。
this.router.navigateByUrl("/dataList");
但是,当我从此页面导航到详细页面时,它不显示已启动(仅构造)(其中包含 / dataElement等网址/ 12345 ,其中 12345 是一个ID),然后返回到执行上面显示的URL导航的页面 / dataList 。 (如果我然后点击F5,我会看到构造和 inited 。)
我没有想到进入构造函数而不进入ngOnInit
,考虑到已实现的界面,但显然,我错了(并且也非常困惑)。
我能做的最好的诊断是,当从子路径路径导航时,不会调用初始化。但这对我来说似乎很奇怪,所以我怀疑我还没有正确诊断它。谷歌搜索没有产生任何我认为充分相关的内容(like this或this)。路由就像这样。
const routes: Routes = [
{ path: "", component: StartComponent },
{ path: "dataList", component: DataListComponent },
{ path: "dataElement/:id", component: DataElementComponent },
...
{ path: "**", component: StartComponent }
];
答案 0 :(得分:5)
在我有一些令人难以置信的天才罢工之后(a.k.a.哑巴运气),我看到了一些关于Angular 5中的错误的东西(以及一些4s)。显然,杀死这个问题的魔力就像这样。
import { NgZone, ... } from "@angular/core";
export class DataElement implements OnInit {
constructor(private zone: NgZone, ... ) { ... }
shaboo() {
...
this.zone.run(() => {
this.router.navigateByUrl("/dataList");
});
}
}
现在,我不知道它做了什么,甚至更少想法如何或为什么。我只是复制this place中的代码示例,如this reply中所述。这是不了解正在发生的事情的最短途径,我完全讨厌它,所以如果有人想提供关于这个主题的一些指示,我会欣喜若狂(同样,如果这些解释了这样一个简单的问题仍然会导致问题)版本5,这将更加棒极了。