angular2 搜索视图

angular2 searching into view

我有一个用于树视图的组件。如果尝试使用 ViewChilden 搜索元素,结果为 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>

在 class 我使用:

@ViewChildren("dropdownTrigger") dropdownTriggerElms: QueryList<ElementRef>;

只在儿童中发现元素。

其他组件使用这个调用它

<levels-list-item [childs]="list | async"></levels-list-item>

@ViewChildren() (dropdownTriggerElms) 的结果仅在 ngAfterViewInit() 或之后设置。如果您尝试从 constructor 访问它,它将是 null.

对于稍后发生的更改,请使用 dropdownTriggerElms.changes.subscribe(...)

ngAfterViewInit() {
  this.dropdownTriggerElms.changes.subscribe(value => console.log('changes', value));
}