Angular 角度-在指令的构造函数中使用RenderR2

Angular 角度-在指令的构造函数中使用RenderR2,angular,Angular,我想将Angular应用程序迁移到更高版本,其中一个步骤是将渲染器替换为渲染器2,我遇到了一个问题,因为渲染器2似乎未在构造函数中定义: constructor(private el: ElementRef, private renderer: Renderer2) { renderer.setAttribute(el.nativeElement, "data-id", this.uniqueId); } 所以我得到一个错误,它说: TypeError:无法读取未定

我想将Angular应用程序迁移到更高版本,其中一个步骤是将
渲染器
替换为
渲染器2
,我遇到了一个问题,因为
渲染器2
似乎未在构造函数中定义:

constructor(private el: ElementRef, private renderer: Renderer2) {
    renderer.setAttribute(el.nativeElement, "data-id", this.uniqueId);
}
所以我得到一个错误,它说:

TypeError:无法读取未定义的属性“setAttribute”

我是否必须将
renderer.setAttribute(…)
移动到OnInit或类似的东西中?对于
Renderer
来说,这很好,但是对于
Renderer2
来说,它不再有效

当前角度版本:5.2.10


请告知。谢谢

我在
ngAfterViewInit
上添加了此操作。这意味着在第一次渲染之后

我还将显式检查元素是否已初始化,并可能添加重试策略。
if(el)el.nativeElement…

(如果您的元素位于
*ngIf
指令中)。

感谢您的回复!但是不可能在构造函数内部使用
呈现程序
?不,元素未定义。另外,在构造函数中编写代码是一种不好的做法,尤其是当您拥有所有这些漂亮的钩子时,比如
ngOnInit
等等。还没有,我会尝试一下。谢谢