Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度9';这';路由器导航端在调试断点订阅时定义不足_Angular_Typescript_Debugging_Angular Router - Fatal编程技术网

Angular 角度9';这';路由器导航端在调试断点订阅时定义不足

Angular 角度9';这';路由器导航端在调试断点订阅时定义不足,angular,typescript,debugging,angular-router,Angular,Typescript,Debugging,Angular Router,我是个新手,还在学习 我有一个订阅router NavigationEnd事件的组件,它从服务访问路由解析中初始化的一些变量 constructor(private route: ActivatedRoute, private router: Router) { var that = this; this.router.events.subscribe((event) => { if (event instanceof NavigationEnd) { this.no

我是个新手,还在学习

我有一个订阅router NavigationEnd事件的组件,它从服务访问路由解析中初始化的一些变量

constructor(private route: ActivatedRoute, private router: Router) {

var that = this;
this.router.events.subscribe((event) => {
  
  if (event instanceof NavigationEnd) {

    this.nominatim = this.route.snapshot.data.meetings.nominatim;
    console.log(this.nominatim);

  }
});}
调试代码时,this.namignim变量未定义,但它确实包含一个可以记录到控制台的值

我发现了另一个关于stackoverflow的问题,它解释了类似的情况

加入

var that = this;
在路由器事件订阅之前,我可以看到调试中的变量

如果我仍然可以使用“this”上下文,我会更喜欢它


我如何才能让它工作?

首先,您不应该在构造函数内部订阅。Angular docs建议所有的工作(除了非常轻的变量赋值)都在ngOnInit中完成-为了安全起见,除了依赖项注入之外,您不应该使用构造函数

如果您将代码移动到ngOnInit,您可能会发现“this”是有效的。ngOnInit是一个有角度的生命周期钩子,在构造函数之后很快就会被自动调用

否则,您可以在ngOnInit中调用一个方法,如下所示:

ngOnInit() {
  this.myCodeToSubscribeToRouterEvents()
}

private myCodeToSubscribeToRouterEvents() {
  // TODO: Paste your subscription code here
}
然后在构造函数中,您可以编写:

constructor(private route: ActivatedRoute, private router: Router) {
  this.myCodeToSubscribeToRouterEvents = this.myCodeToSubscribeToRouterEvents.bind(this);
}
是的,我知道我在构造函数中放入了代码,但这是极少数的例外情况之一。此构造函数代码确保myCodeToSubscribeToRouterEvents中的“This”始终是组件的实例(这是您想要的),而不是其他内容

希望能有帮助。J.E.S.U.S爱你:D

关于:

this.nominatim = this.route.snapshot.data.meetings.nominatim;
console.log(this.nominatim);
您的生活会更好:

this.nominatim = this.route.snapshot.data.meetings.nominatim;
console.log(this.route.snapshot.data);

因此,您可以检查数据是否通过:)

谢谢。关于我为什么在构造函数中订阅NavigationEnd事件,有一个原因。这是一个路由,它在同一页上使用路由定义上的Runguard和resolver重新加载来自解析程序的数据。ngOnInit()方法似乎只在第一次创建的组件上运行。通过向构造函数添加以下代码,我发现每次重新加载路由时,ngOnInit()都会运行。this.router.RouterUseStrategy.shouldReuseRoute=()=>false;我已将代码移动到ngOnInit(),并能够使用“this”上下文进行调试。上帝保佑。