Angular 4 - 将事件转换为可观察流

woo*_*d1y 5 rxjs angular

我对 Rxjs 和 Angular 4 还很陌生,无法理解如何做到这一点。

模板:

<div class="btn-group cp">
   <input [colorPicker]="bgColor" 
   (colorPickerChange)="colorChanged()" 
   [style.background]="bgColor">
</div>
Run Code Online (Sandbox Code Playgroud)

colorChanged() 在 mousemove 上被 colorPickerChnage 调用。我想在我的组件中有这样的东西:

colorChanged$.subscribe(data => console.log(data))
Run Code Online (Sandbox Code Playgroud)

(它会有一些去抖动和更多的订阅者,这就是为什么我想把它作为一个可观察的。)

woo*_*d1y 5

我解决了。

模板:

<div class="btn-group cp">
   <input [colorPicker]="bgColor" 
   (colorPickerChange)="colorChanged(bgColor)" 
   [style.background]="bgColor">
</div>
Run Code Online (Sandbox Code Playgroud)

然后在组件中:

import { Subject } from 'rxjs';

  colorChanged$ = new Subject<string>();

  colorChanged(bgColor) {
     this.colorChanged$.next(bgColor)
  }

  ngOnInit() {
     this.colorChanged$.subscribe(v => console.log(v));
  }
Run Code Online (Sandbox Code Playgroud)

  • 尽管这有效,但事实证明这不是“Rx”的做法。阅读 Ben Lesh 的文章:[On The Subject Of Subjects (in RxJS)](https://medium.com/@benlesh/on-the-subject-of-subjects-in-rxjs-2b08b7198b93) (2认同)