2016-05-12 70 views
1

我有一个树视图组件。如果试图如果使用ViewChilden搜索elems的,结果为0。angular2搜索视图

模板:

<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>; 

elems的被发现仅在儿童。

其它部件通过使用该

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

回答

3

@ViewChildren()dropdownTriggerElms)中或之后ngAfterViewInit()只的结果集被称为它。如果您尝试从constructor访问它,它将是null

对于后来所发生的变化使用dropdownTriggerElms.changes.subscribe(...)

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

我知道,但它没有帮助 – Illorian

+0

它不为空,查询长度为0 – Illorian

+1

那么问题在别处,但很难说没有看到代码。你可以创建一个重击者吗? –