访问ViewChildren查询列表的第n个子元素(角度)

时间:2019-04-18 00:14:46

标签: angular viewchild

我正在尝试访问viewchildren查询列表的第n个子项。

下面是我的TS:

@ViewChildren(PopoverDirective) popovers: QueryList<PopoverDirective>;
console.log(this.popovers)

console.log显示更改,第一,最后,长度和_results。

如何访问第n个孩子(即第3个孩子,而不是第一个孩子)?

当我尝试使用_results(即this.popovers._results [2])执行此操作时,出现错误。

谢谢。

3 个答案:

答案 0 :(得分:2)

  

实际上有两种方法可以访问QueryLists

中的特定对象

第一种方法:.filter()

您还可以根据自己的喜好使用 .map和.reduce

// Since if you have 3 items in an array, the counting starts at 0, so 1 is the 2nd element
const elementTwo = this.popovers.filter((element, index) => index === 1);


// Or if you want to be specific based on the data inside the PopoverDirective
// and if that PopoverDirective has an @Input() name, you can access it by:
const elementTwo = this.popovers.filter((element, index) => element.name === 'John');

第二种方法:.forEach()

// You can perform any action inside the .forEach() which you can readily access the element
this.popovers.forEach((element, index) => console.log(element));

第三个方法:第一个和最后一个

this.popovers.first         // This will give you the first element of the Popovers QueryList

this.popovers.last          // This will give the last element of the Popovers QueryList

原始数组列表:.toArray()

this.popovers.toArray();    // This will give you the list of popovers caught by your QueryList

答案 1 :(得分:1)

您可以使用toArray()方法,然后可以按索引访问。

答案 2 :(得分:1)

可以通过Find

按索引访问
  @ViewChildren(PopoverDirective) popovers: QueryList<PopoverDirective>;

  public getByIndex(x: number) {
    return this.popovers.find((_, i) => i == x)
  }