【发布时间】:2018-06-17 19:38:17
【问题描述】:
我已经实现了以下控制台输出来跟踪执行的内容和未执行的内容。 /dataList 下的页面代码。
export class DataList implements OnInit {
constructor(private service: DataService) {
console.log("constructed");
}
ngOnInit() {
console.log("inited");
...
}
}
现在,当通过输入 URL 访问页面时,它可以在控制台中同时提供输出(即 constructed 和 inited)。 > 以及使用从另一个页面路由访问页面时,如下所示。
this.router.navigateByUrl("/dataList");
但是,当我从该页面导航到详细页面(使用类似 /dataElement/12345 的 URL)时,它不显示 initied(仅 constructed) ,其中 12345 是一个 ID),然后返回到执行上述 URL 导航的页面 /dataList。 (如果我然后按 F5,我会同时看到 constructed 和 inited。)
考虑到已实现的接口,我认为即使不进入ngOnInit 也无法进入构造函数,但显然我错了(而且也很困惑)。
我能做的最好的诊断是,从子路径的路由导航时,不会调用初始化。但这对我来说似乎很奇怪,所以我怀疑我也没有正确诊断它。谷歌搜索没有产生任何我认为足够相关的东西(like this 或this)。而且路由是这样的。
const routes: Routes = [
{ path: "", component: StartComponent },
{ path: "dataList", component: DataListComponent },
{ path: "dataElement/:id", component: DataElementComponent },
...
{ path: "**", component: StartComponent }
];
【问题讨论】:
-
你在不同的浏览器中看到这种行为吗?
-
@ConnorsFan 是的,在 Cr 和 FF 中是一致的。懒得在蹩脚的地方测试它。
-
This issue 报告了类似的问题(2016 年),发现库的导入顺序可能有一些影响。您可以检查是否在
zone.js之后导入了某些库(例如在 vendor.ts 中)并更改顺序以查看是否有所不同。
标签: angular typescript routing