为什么我不能在@ViewChildren中传递多个组件?
目前有这个:
@ViewChildren(ColorFilterComponent, TransmissionFilterComponent)
public filters: QueryList<Filter>;
Run Code Online (Sandbox Code Playgroud)
这两个组件都实现了我的Filter接口:
export declare abstract class Filter {
abstract applyFilter(vehicles: Vehicle): boolean;
}
Run Code Online (Sandbox Code Playgroud)
在某个时候,我要遍历filters并调用applyFilter()viewChildren中所有组件的方法。
但是,当我做一个简单的日志时:
console.log(this.filters.toArray());
Run Code Online (Sandbox Code Playgroud)
它仅包含一个过滤器。另一个不在这里。
在这种情况下,什么是最佳的最佳做法?
仅模板变量支持此功能
@ViewChildren('var1,var2,var3')
Run Code Online (Sandbox Code Playgroud)
但不适用于组件或指令类型。
如果Filter是一个公共基类,您可以尝试以下方法:
providers: [{
provide: Filter,
useExisting: [ColorFilterComponent, TransmissionFilterComponent],
multi: true
}]
Run Code Online (Sandbox Code Playgroud)
然后查询像
@ViewChildren(Filter) filters: QueryList<Filter>;
Run Code Online (Sandbox Code Playgroud)
另请参阅https://github.com/angular/angular/issues/8580#issuecomment-218331920
HTML:
<colorfilter #filter></as-colorfilter>
<transmissionfilter #filter></as-transmissionfilter>
Run Code Online (Sandbox Code Playgroud)
零件:
@ViewChildren('filter')
public filters: QueryList<Filter>;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3409 次 |
| 最近记录: |