触发单击嵌套循环Angular ngFor下的特定项目

时间:2019-05-24 09:33:27

标签: angular angular6 angular7 ngfor

如何在嵌套循环下定位指定项目

<ul #parents *ngFor="let parent of parents">
     <li #child *ngFor="let child of parents.childGroup"> {{child.name}} </li>
<ul>

Ts文件

在我的代码中,我的目标是parents[5].child[0],但是它作为子项parents[0].child[0]

@ViewChildren('parents') parents : QueryList<ElementRef>
 @ViewChildren('child') child: QueryList<ElementRef>

this.parents.forEach((item, index) => {
if (index === 5 ) {
(this.child.find( (item , index) => index === 0 ).nativeElement as HTMLElement).click();
}


});

每个父母都有自己的孩子,这里的目标是根据所有孩子的索引计算的

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您可以像这样在html元素中设置动态ID

<ul #parents *ngFor="let parent of parents">
     <li #child *ngFor="let child of parents.childGroup;let i=index" id="{{'child'+ i }}">
          {{child.name}} 
    </li>
<ul>

,然后从打字稿中单击。

this.parents.forEach((item, index) => {
  if (index === 5 ) {
    document.getElementById("child" + index  ).click();
  }
});

答案 1 :(得分:0)

您可以在没有ViewChild()引用的情况下进行此操作。

您可以在子组件上添加click事件侦听器,并向其传递参数。

<li *ngFor="let child of parent.children" (click)="handleClick(parent, child)">

然后相应地处理点击。

handleClick(parent, child){
  console.log(parent);
  if(this.parents[1] === parent && (parent.children.indexOf(child)) === 1 ){
    alert(`You clicked ${child} of parent ${parent.id}`)
  }
}

这里是demo