Angular2将nativeElement添加到组件的原型

时间:2017-05-11 18:58:38

标签: angular

这可能是一个完全愚蠢的问题(嘿!这对SO来说很棒......)。这是我的问题:我在我的主模块模板中有多个* ngFor,它实际上重复了子组件,我直接通过父组件中的ViewChildren装饰器(vith QueryList和ElementRef)向它添加类和内联样式。父模板看起来非常基本,如下所示:

<div #child *ngFor="let child of children">
  <app-child-component></app-child-component>
</div>

parrent组件看起来像这样:

@ViewChildren('child') children_elements: QueryList<ElementRef>;
... do whatever I do with children ...

我知道我可以在子组件中绑定类和样式,或者使用ngStyle / ngClass。但这些对我来说并不好,因为我有特定的用例,我需要根据模板中的索引来定位模板子项,我需要从数组中动态地将它们注入到模板中。好吧,我的解决方案一切都很好,但我想知道我是否可以摆脱包装div元素,所以我只重复这样的子组件:

  <app-child-component #child *ngFor="let child of children"></app-child-component>

问题是,我猜,Angular的QueryList是不可更改的,因此我无法在其项目中添加或删除类或样式。对于elementRef和Renderer,或者在host元素上调用的旧的classy querySelectorALl()也是如此(即this.elementRef.childNodes或document.querySelectorALl('child')...在它的子节点上没有'nativeElement',没有'style'或'classList'或类似的东西。

我怀疑我问的是正确的问题,但在我的脑海里听起来像这样:“我可以以某种方式增强我的子组件,所以当它通过ViewChildren从其父级访问它时,它有类似.elementRef.nativeElement吗?”或者“是否有其他方法可以访问模板视图,以便能够使用重复注入的组件进行操作?” (我试图阅读ViewRef,EmbeddedView和其他人的文档,但这让我很疯狂......)。

如果你认为这是垃圾,我甚至不应该问,请,只需要投票,我自己也可以这样做......

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以指定read属性,如

@ViewChildren('child', { read: ElementRef }) children_elements: QueryList<ElementRef>;

另见