【问题标题】:Renderer2 error - id did not match any elementsRenderer2 错误 - id 不匹配任何元素
【发布时间】:2020-06-10 08:02:36
【问题描述】:

所以我有一个输入字段,我想专注于 Angular 应用程序中的负载。我读到 Renderer2 方式是这样做的好方法,如果我像这样在点击时调用该函数,它就可以工作:

focusMyInput() {
    this.renderer.selectRootElement('#myInput').focus();
}

但是如果我尝试让它专注于负载,像这样:

ngAfterViewInit() {
    this.renderer.selectRootElement('#myInput').focus();
}

它会抛出一个错误:

 The selector "#myInput" did not match any elements
    at DefaultDomRenderer2.selectRootElement

HTML:

<input id="myInput" />

知道这背后的原因是什么吗?

【问题讨论】:

  • 你能不能把 html element anf viewchild 代码行也提个问题?
  • 这里没有 ViewChild 但有一个带有 ID 的输入标签,这是文章:onthecode.co.uk/…
  • 在 ngAfterViewInit 触发时,您的输入可能尚未初始化。可能是输入在带有 *ngIf 的块内。分享您的 html 会有所帮助。
  • 实际上它在 *ngIf 内部,this.renderer.selectRootElement(this.myInput.nativeElement)"返回该输入字段,但如果我尝试应用 focus() 它会引发相同的未定义错误,更长的超时没有帮助......

标签: javascript angular typescript angular8 angular-renderer2


【解决方案1】:

你可以试试:

ngOnInit() {
    setTimeout(() => this.renderer.selectRootElement('#myInput').focus());
}

更多详情请关注this article

关于渲染后的事件似乎有很长的讨论。 This solution 可能会有所帮助或(真的很难看)在我之前提出的解决方案中设置 100 毫秒超时。

希望这会有所帮助。

【讨论】:

  • 谢谢,但同样的错误仍然存​​在......当我从一个函数触发它时,渲染器可以工作,但由于某种原因,问题似乎出在生命周期挂钩中 - 它们确实有效,我可以控制台记录它,但是它无法从 ngOnInit 或 afterViewInit 触发函数
  • 选择器“#myInput”与 DefaultDomRenderer2.selectRootElement 中的任何元素都不匹配 ...
  • 谢谢,但同样的错误仍然存​​在:(谢谢大家,我会尝试其他的东西
  • 好的,由于某种原因,它现在可以使用超时,当前有 5000 毫秒...哈哈。感谢您的努力,将其标记为已接受
【解决方案2】:

请试试这个workig demo

 @ViewChild('myInput') myInput: ElementRef;//if it is direct child or element
 @ContentChild('myInput') myInput: ElementRef;// if it is inside ng-content html
    
ngAfterViewInit() {
this.renderer.selectRootElement(this.myInput.nativeElement).focus();
}

 ngAfterContentInit() {
this.renderer.selectRootElement(this.myInput.nativeElement).focus();
    }

在 Html 中你必须这样做

<input id="myInput" #myInput />

【讨论】:

  • 试过了...nativeElement 是未定义的,但没有它也无法工作
  • 请在输入中添加#myInput
  • 是的,没有结果
  • 在 ViewChild 中尝试 ContentChild
  • 请检查这个 poc stackblitz.com/edit/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-26
相关资源
最近更新 更多