我已在此处阅读了一些答案,例如this,但我的问题略有不同。我想将组件作为DOM元素,以便我可以在其上添加/删除一些CSS类。
我的HTML模板包含组件:
<sidenav-menu #sidenav class="app__sidenav"></sidenav-menu>
我的课程中包含对它的引用:
@ViewChild('sidenav') sidenav: ElementRef;
但是当我在我的一个函数中记录this.sidenav
时,我发现它是一个Sidenav组件类的表示,而不是它的DOM表示。为什么会这样?
答案 0 :(得分:6)
您可以使用read
参数指定所需内容:
@ViewChild('sidenav', {read: ElementRef}) sidenav: ElementRef;
通过这种方式,您可以获得ElementRef
并可以使用@joshrathke提到的this.sidenav.nativeElement
或(对于其他用例)
@ViewChild('sidenav', {read: ViewContainerRef}) sidenav: ElementRef;
我对您喜欢的问题的回答还提到了这个read
参数https://stackoverflow.com/a/35209681/217408
答案 1 :(得分:2)
修改强>
为了实现这一点,您需要实施@GünterZöchbauer建议,使用ViewChild
read
来提取组件。
原始答案
您需要使用nativeElement
对象的ElementRef
属性。你会在那里找到你的DOM表示。它也暴露了DOM元素,并允许您在其上调用传统方法,就像它是vanilla javascript或jQuery中的DOM元素一样。
console.log(this.sidenav.nativeElement);