2017-08-29 93 views
2

我有在組件的變量聲明爲:如何在Angular 2中訂閱變量?

public filter: Filter = {}; 

在模板我結合這個對象像爲:

<input [ngModel]="filter.name" value=""/> 
<input [ngModel]="filter.secondname" value=""/> 

如何傾聽改變這個變量(對象)filter

我的意思是這樣的:

this.filter.subscribe().then(changes => { // Call method here }) 

PS: 我不想使用事件ngChange=""每個輸入元素

+1

https://angular.io/guide/reactive-forms#observe-control-changes –

+0

你能更準確的你正在努力實現的?有幾個選項可用,它取決於您的需求。 –

回答

2

如果你想訂閱它,那麼你必須讓它可觀察到的可以訂閱。即

filter: Observable<Filter>; 

然後,如果您從服務檢索數據,而不是訂閱服務,只需將其保存到變量。即:

filter = this.someService.getFilter(); 

或者,如果你不使用服務檢索Filter數據,您可以創建一個可觀察到你想要的值:this.filter = Observable.of(myFilter);

然後你就可以訂閱this.filter哪裏您需要:this.filter.subscribe(data => ...)

+0

我不需要訂閱服務,我需要訂閱變量 – OPV

+1

的變化。您不必使用服務,但以某種形式或其他形式,您需要「過濾器」才能成爲可觀察對象以訂閱它。您的兩個主要選項是使用'Observable.of(value)'將值轉換爲可觀察值,或者如果您使用服務從服務中捕獲可觀察值。 –

+0

我會嘗試,問題如下:有一些表的行。每行都有幾個選擇列表。這張表是由ngFor設計的。當我改變選擇列表時,它改變了NgFor的全局模型。所以我只需要存儲更改行,而不是影響全局模型。 – OPV

0
+0

我不確定 – OPV

+1

通過Object.defineProperty,我們現在可以爲對象屬性定義getter和setter函數。 只要有屬性名稱賦值,setter函數就會被調用,並且每當你要求該屬性名稱時,getter函數都會被調用。 所以現在,你可以在setter函數中做需要的事情。 如需進一步參考,請查看上面提供的鏈接。 –

+0

我剛剛寫了一篇博客文章,演示了這裏:https://blogs.msmvps.com/deborahk/filtering-in-angular/查看「listFilter」getter和setter以及如何使用它來重新過濾每個數據改變它的價值。 – DeborahK