我有一个用例,其中特定div的宽度改变了w.r.t dom,我使用view child来点击宽度。
我想只使用最新的宽度值,而Angular也给出了中间结果。如何将变量转换为Observable Stream。我尝试使用Observable.of,但它只订阅了一次而不是之后。
@Directive({
selector: '[watchValueChange]'
})
export class ChangeDirective{
@Output() onValueChange = new EventEmitter<any>();
@Input('watchValueChange') public valueChange: any = null;
//这个值动态地接收我想要的宽度 可观察到我可以订阅并使用debouce来获得 所有更改完成后但在第一次订阅后的值 输入改变它不起作用
private changeEvent: Subject<any> = new Subject<any>();
ngOnInit() {
this.valueChange.asObservable().debounceTime(300).subscribe(value => {
this.onValueChange.emit(value);
});
}
ngOnChanges(changes){
this.changeEvent.next(this.valueChange);
}
}
答案 0 :(得分:0)
您似乎正在寻找auditTime
。
this.changeEvent.auditTime(300).subscribe(value => {
this.onValueChange.emit(value);
});
我不知道你的意思:
...在第一次订阅后,当输入改变时它不起作用
也许您想使用ReplaySubject(1)
代替Subject()
?