2017-04-06 152 views
2

我对Rxjs和Angular 4相当陌生,无法让我的脑袋知道如何做到这一点。Angular 4 - 将事件转换为可观察的流

模板:

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

colorChanged()获取上鼠标移动称为由colorPickerChnage。我想在我的组件是这样的:

colorChanged$.subscribe(data => console.log(data)) 

(它会产生一定的反跳和更多的用户,这就是为什么我希望把它作为一个观察的。)

+0

您可以订阅'EventEmitter'和无论从功能发出自身或使用类似'HostListener'为'你的组件的mousemove事件。 – Dylan

回答

3

我解决它。

模板:

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

然后在组件:

import { Subject } from 'rxjs'; 

    colorChanged$ = new Subject<string>(); 

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

    ngOnInit() { 
    this.colorChanged$.subscribe(v => console.log(v)); 
    } 
+2

虽然这有效,但事实证明这不是“Rx”的做法。阅读Ben Lesh的文章:[关于主题的主题(在RxJS中)](https://medium.com/@benlesh/on-the-subject-of-subjects-in-rxjs-2b08b7198b93) – wood1y

+0

也许你可以使用Observable.fromEvent(event.target,'event type') 看看这个 - [link](https://www.learnrxjs.io/operators/creation/fromevent.html) – Awadhoot

+0

event.target会是什么在这种情况下,你如何将fromEvent连接到colorPickerChange? fromEvent示例仅显示最基本的用例,文档上的点击事件以及依赖DOM事件不是“角度”方式。 –