简体   繁体   English

Angular - 在指令的构造函数中使用 Renderer2

[英]Angular - using Renderer2 inside the constructor of a directive

I want to migrate an Angular app to a higher version and one the steps is to replace Renderer with Renderer2 , and I have a problem because Renderer2 seems to be not defined inside the constructor:我想将 Angular 应用程序迁移到更高版本,其中一个步骤是将Renderer替换为Renderer2 ,我遇到了一个问题,因为Renderer2似乎没有在构造函数中定义:

constructor(private el: ElementRef, private renderer: Renderer2) {
    renderer.setAttribute(el.nativeElement, "data-id", this.uniqueId);
}

So I get an error which says:所以我得到一个错误,它说:

TypeError: Cannot read property 'setAttribute' of undefined类型错误:无法读取未定义的属性“setAttribute”

Do I have to move renderer.setAttribute(...) into OnInit or something like that?我是否必须将renderer.setAttribute(...)移动到 OnInit 或类似的东西中? With Renderer this worked fine, but with Renderer2 it no longer works.使用Renderer这工作正常,但使用Renderer2它不再工作。

Current Angular version: 5.2.10当前 Angular 版本:5.2.10

Please advise.请指教。 Thanks!谢谢!

I add do this on ngAfterViewInit .我在ngAfterViewInit上添加了这个。 That means after first render!这意味着在第一次渲染之后!

I would also check explicit If the element is already initialized and maybe add a retry policy.我还会检查显式元素是否已经初始化,并可能添加重试策略。 if(el)el.nativeElement... (If your element is inside a *ngIf directive). if(el)el.nativeElement... (如果您的元素在*ngIf指令内)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM