【发布时间】:2018-03-01 23:42:45
【问题描述】:
ETA:我知道有多种方法可以查看我的form 的变化。那不是我想要做的。正如标题所说,我在问如何观察一个对象的变化。下面显示的应用程序仅用于说明目的。请回答我提出的问题。谢谢!
我有这个简单的应用程序:
import { Component, OnInit } from '@angular/core';
export class Customer {
firstName: string;
favoriteColor: string;
}
@Component({
selector: 'my-app',
template: `
<div *ngIf="customer">
<input type="text" [(ngModel)]="customer.firstName">
<input type="text" [(ngModel)]="customer.favoriteColor">
</div>
`
})
export class AppComponent implements OnInit {
private customer: Customer;
ngOnInit(): void {
this.customer = new Customer();
// TODO: how can I register a callback that will run whenever
// any property of this.customer has been changed?
}
}
注意 TODO。我需要注册一个回调,该回调将在 this.customer 的任何属性发生更改时运行。
我不能在输入上使用 ngChange。我需要直接订阅模型的更改。原因与我的用例有关,不值得在这里讨论。请相信我,这不是一个选择。
这可能吗?我在谷歌上搜索了很多,但我已经干了。
【问题讨论】:
-
使用响应式表单,并使用 FormGroup 公开的 valueChanges observable。
-
这些输入是什么形式的?如果他们不是,他们应该是。如果他们订阅了表单的更改。
-
表单的状态和对象的状态是一致的。您无法听到对象的更改。但是由于每次表单发生变化,模型也会发生变化,所以监听表单的变化基本上就相当于监听了对象的变化。
-
您是否尝试将一个简单的 getter/setter 附加到每个 Customer 对象?老实说,我什至不确定这是否可能,但我想我会把它扔在那里。
-
你可能想通了吗?令人惊讶的是,没有简单的方法可以做到这一点。在我看来,这是一种常见的构建块。
标签: javascript angular typescript