2017-04-06 157 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事件不是「角度」方式。 –