对于我的应用程序我希望有一个像ngForOf(https://github.com/angular/angular/blob/master/packages/common/src/directives/ng_for_of.ts)这样的指令,但我没有从Input()获取可迭代对象,而是希望从指令Class中的行为主题获取。
使用Host类中的Behavior Subject,如:
BehaviourSubject.subscribe((value) => {this.items = value})
<comp ngFor="let item of item"></comp>
不是一种选择。相反,我想在指令中开始订阅。
我想使用这样的指令:
<comp *ngFor></comp>
任何使这项工作的想法? (来自ngForCode的变化)
答案 0 :(得分:0)
未经测试,但要给你一个想法:
@Directive({
selector: '[forBs]'
})
export class ForBs<T> extends NgForOf<T> {
@Input()
forBs: BehaviorSubject<NgIterable<T>> = new BehaviorSubject([]);
get ngForOf(): NgIterable<T> {
return this.forBs.getValue();
}
constructor(_viewContainer: ViewContainerRef, _template: TemplateRef<NgForOfContext<T>>, _differs: IterableDiffers) {
super(_viewContainer, _template, _differs);
}
}
这可能没有模板,trackBy支持..以及onChanges
和doCheck
挂钩可能还有其他一些问题。但话说回来,这将有助于你走上正轨。
用法如下:
<comp *forBs="item$"></comp>
哪里
item$ = new BehaviourSubject([]);
但话说回来,你也可以使用async
管道;)
<comp *ngFor="let item of item$ | async"></comp>