我有一个用于树视图的组件。如果尝试使用ViewChilden搜索elems,则结果为0。
模板:
<ul class="dropdown">
<li class="levels-list-item" *ngFor="let level of levelsList">
<div class="flex justify-flex-start dropdown-item align-center">
<i class="wrapper fa fa-play rotate-90"
[ngClass]="{'invisible': ! level.childs?.length}"
attr.data-id="{{level.id}}"
#dropdownTrigger></i>
<div class="dropdown-item-inner flex full-width align-center">
<div class="name">{{level.title}}</div>
<div class="tools flex justify-flex-start">
<a class="wrapper tool" title="Добавить уровень"
[routerLink]="['../LevelAdd', {parentId: level.parentId}]"
*ngIf="isPDO(level.type)">
<i class="fa fa-plus"></i>
</a>
<a class="tool wrapper" title="Редактировать уровень"
[routerLink]="['../LevelEdit', {parentId: level.parentId, id: level.id}]">
<i class="fa fa-pencil"></i>
</a>
</div>
</div>
</div>
<levels-list-item [childs]="level.childs"></levels-list-item>
</li>
</ul>
在课堂上我使用:
@ViewChildren("dropdownTrigger") dropdownTriggerElms: QueryList<ElementRef>;
只有儿童才能找到元素。
使用此
调用其他组件<levels-list-item [childs]="list | async"></levels-list-item>
答案 0 :(得分:3)
@ViewChildren()
(dropdownTriggerElms
)的结果仅在ngAfterViewInit()
中或之后设置。如果您尝试从constructor
访问它,则会null
。
对于稍后发生的更改,请使用dropdownTriggerElms.changes.subscribe(...)
ngAfterViewInit() {
this.dropdownTriggerElms.changes.subscribe(value => console.log('changes', value));
}