【问题标题】:ViewChildren passing multiple componentsViewChildren 传递多个组件
【发布时间】:2016-09-07 19:22:19
【问题描述】:

为什么我不能在@ViewChildren 中传递多个组件?

目前有这个:

 @ViewChildren(ColorFilterComponent, TransmissionFilterComponent)
 public filters: QueryList<Filter>;

两个组件都实现了我的过滤器接口:

export declare abstract class Filter {
    abstract applyFilter(vehicles: Vehicle): boolean;
}

在某个时刻,我正在遍历 filters 并为 viewChildren 中的所有组件调用 applyFilter() 方法。

但是当我做一个简单的日志时:

console.log(this.filters.toArray());

它只包含一个过滤器。另一个不在这里。

在这种情况下,最佳做法是什么?

【问题讨论】:

    标签: angular


    【解决方案1】:

    HTML:

     <colorfilter #filter></as-colorfilter>
     <transmissionfilter #filter></as-transmissionfilter>
    

    组件:

    @ViewChildren('filter')
    public filters: QueryList<Filter>;
    

    【讨论】:

      【解决方案2】:

      这仅支持模板变量

      @ViewChildren('var1,var2,var3')
      

      但不适用于组件或指令类型。

      如果Filter 是一个通用的基类,你可以试试这样的:

      providers: [{ 
        provide: Filter, 
        useExisting: [ColorFilterComponent, TransmissionFilterComponent],
        multi: true
      }]
      

      然后像这样查询

      @ViewChildren(Filter) filters: QueryList<Filter>;
      

      另见https://github.com/angular/angular/issues/8580#issuecomment-218331920

      【讨论】:

      • 这不是我要找的答案。这种情况有不同的解决方案吗?
      • 我更新了我的答案。我自己还没有尝试过。特别是没有'multi:true`
      • 感谢您的帮助。在您提供的链接上找到了解决方案。看我的回答。
      猜你喜欢
      • 2017-09-29
      • 2022-11-21
      • 2019-03-29
      • 2017-08-23
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      相关资源
      最近更新 更多