【问题标题】:Implementing AfterViewInit causes an endless loop of event invokations实现 AfterViewInit 会导致无限循环的事件调用
【发布时间】:2017-12-07 00:09:46
【问题描述】:

我有一个很奇怪的问题。以下代码产生无限循环的调用。可能仅在服务器端渲染期间,但我不确定。

import { Component, AfterViewChecked } from '@angular/core';

@Component({
  selector: 'test',
  template: '<div>nothing...</div>'
})
export class TestComponent implements AfterViewChecked {

  ngAfterViewChecked(): void {
    console.log('wtf');
  }
}

确切的错误信息如下:

处理请求时发生未处理的异常。

NodeInvocationException:节点调用在 60000 毫秒后超时。 您可以通过设置 NodeServicesOptions 上的 InvocationTimeoutMilliseconds 属性。

第一个调试步骤是确保您的 Node.js 功能 总是调用提供的回调(或抛出异常 同步),即使遇到错误。否则,.NET 代码无法知道它是完成还是失败。

Microsoft.AspNetCore.NodeServices.HostingModels.OutOfProcessNodeInstance+d__13.MoveNext()

有趣的是,在没有实现 ngAfterViewChecked 的情况下编译 ASP .Net Core 项目,然后实现它并用 HMR 注入它不会导致错误。这就是为什么我认为错误可能只发生在服务器端渲染步骤期间?

【问题讨论】:

标签: angular asp.net-core


【解决方案1】:

我遇到了同样的问题。每次组件检测到一些变化时,ngAfterViewChecked 被调用 3 次。可能您的服务器正在与该组件通信,或者只是您正在某个地方对其进行实例化。另一次,当我从组件中询问某些内容(使用 EventListener)时,我遇到了这个问题,相同的循环。请改用 ngAfterViewInit。或者尝试使用 ngAfterComponentChecked,但我不确定这是否可行。

【讨论】:

  • 不幸的是,这正是我不能使用的,因为 ngAfterViewInit 只被调用一次。我需要一个钩子,每次视图更改时都会调用它;-)
  • 您想订阅什么更改?如果您正在等待 ngModel 更改,您可以使用 (ngModelChange)="yourFunction($event)" 的双重绑定
猜你喜欢
  • 2011-08-23
  • 2017-12-24
  • 1970-01-01
  • 2017-06-10
  • 2015-01-16
  • 2021-06-12
  • 2016-05-01
  • 2012-04-28
  • 2021-02-19
相关资源
最近更新 更多