angular2搜索视图

时间:2016-05-12 09:07:37

标签: twitter-bootstrap angular angular2-template

我有一个用于树视图的组件。如果尝试使用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>

1 个答案:

答案 0 :(得分:3)

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

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

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