【问题标题】:QueryList of inherited components in AngularAngular中继承组件的查询列表
【发布时间】:2018-03-12 11:25:52
【问题描述】:

我有以下组件:基础组件 A。组件 B 和 C 继承自 A。

@Component({
  selector: 'A',
  template: `<div>A</div>`
})
export class A {}

@Component({
  selector: 'B',
  template: `<div>B</div>`
})
export class B extends A {}

@Component({
  selector: 'C',
  template: `<div>C</div>`
})
export class C extends A {}

还有一个包含所有 A、B 和 C 组件的组件类:

<A></A>
<B></B>
<C></C>

我的问题是我怎样才能得到所有 A、B 和 C 的查询列表

我试过了

@ViewChildren(A) components: QueryList<A>;

但它只给了我A 组件。

这里还有 plunkr 证明了这个问题。

提前谢谢你。

【问题讨论】:

标签: angular


【解决方案1】:

为了通过@ViewChildren(A) 查询获取所有组件,您应该在每个派生组件上定义A 提供程序:

@Component({
  selector: 'A',
  template: `<div>A</div>`
})
export class A {}

@Component({
  selector: 'B',
  template: `<div>B</div>`,
  providers: [{ provide: A, useExisting: B }]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
})
export class B extends A {}

@Component({
  selector: 'C',
  template: `<div>C</div>`,
  providers: [{ provide: A, useExisting: C }]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
})
export class C extends A {}

稍后在您的父组件中,您应该编写如下内容:

@ViewChildren(A) components: QueryList<A>;

Ng-run Example

另见:

【讨论】:

  • 谢谢你。这是我正在寻找的解决方案。
  • 如果您在 ng-content 中加载继承的组件,请使用 @ContentChildren 进行查询...
猜你喜欢
  • 2019-07-02
  • 2020-10-07
  • 2022-11-23
  • 2018-04-20
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多