我正在尝试访问viewchildren查询列表的第n个子项。
下面是我的TS:
@ViewChildren(PopoverDirective) popovers: QueryList<PopoverDirective>;
console.log(this.popovers)
console.log显示更改,第一,最后,长度和_results。
如何访问第n个孩子(即第3个孩子,而不是第一个孩子)?
当我尝试使用_results(即this.popovers._results [2])执行此操作时,出现错误。
谢谢。
答案 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)
}