2

我有data可變一個簡單的服務:如何從指令看一個服務內的簡單變量變化?

this.myService.data = 12345; 

我試圖做到這一點與:

import { Injectable } from '@angular/core'; 

@Injectable() 
export class MyService { 

    private _data:number; 

    get data(): number { 
    return this._data; 
    } 
    set data(value: number) { 
    this._data = value; 
    } 

} 
從指令我想趕每當有人正在做設置爲我的變量

現在訂閱但在語法上丟失了一些東西:

this.myService.data.subscribe(res => console.log(res)); 

我在想什麼?我應該宣佈obserabvle?爲什麼和在哪裏? 我不確定是否正確認可這個問題,因爲這不是HTTP請求,所以更改很簡單。

回答

3

可以這樣實現這一點:

在你的服務,把一個EventEmitter:

dataUpdated : EventEmitter<number> = new EventEmitter(); 

然後,當你設置你的數據,添加在使用setData結束:

this.dataUpdated.emit(this.data); 

它允許通知訂閱的組件變量已更改併發送新值(可以發送任何你想要的)。

最後,在你的組件,您可以這樣告知:

constructor 
(
    private service: Service 
) 

ngOnInit() 
{ 
    this.service.dataUpdated.subscribe 
    (
     (data: number) => 
     { 
      //setData used, you can use new data if needed 
     } 
    ); 
} 
+1

謝謝你這麼多。這是一個簡單的解決方案!再次感謝 – AngularOne

+0

我很高興它幫助你。 :) – Powkachu

+0

順便說一句,有沒有一個原因被改變3次? – AngularOne