Нажмите триггер на конкретный элемент под вложенным циклом Angular ngFor - PullRequest
1 голос
/ 24 мая 2019

Как выполнить таргетинг на указанный элемент во вложенном цикле

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

Ts File

В моем коде Asper моя цель 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 ]

2 голосов
/ 24 мая 2019

Вы можете установить динамический идентификатор в элементе html следующим образом:

<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();
  }
});
0 голосов
/ 24 мая 2019

Вы можете сделать это без 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}`)
  }
}

Вот демоверсия

...