我试图检测对象何时发生变化。该对象已连接到大型表单。每当用户更改输入时,我希望它在页面底部弹出保存/取消按钮。
我的想法是只复制对象并执行SharedPreferences
,如果它们单击取消,则将数据设置为与复制对象相等。我不知道这是否是正确的方法,因为在小任务中我将使用两倍的变量,但是我只用了短时间的*ngIf="object !== object_copy"
。但是,我无法使用此方法,因为每当我进行类型复制时,对象都会丢失其类型。
有人可以帮助我解决这个问题吗?
答案 0 :(得分:0)
如果您使用的是Form,则可以利用Angular的表单控件,该控件会在任何时候以任何方式更改了表单及其任何值。然后,您可以做一些简单的事情:
form.dirty
,甚至是特定字段。您可以使用Angular的反应式和模板表格来做很多事情。
答案 1 :(得分:0)
您必须订阅一个事件来处理更改事件:
constructor(private formBuilder: FormBuilder) {
this.myForm = formBuilder.group({
name: 'Jose Anibal Rodriguez',
age: 23
})
this.myForm.valueChanges.subscribe(data => {
console.log('Form changes', data);
})
}
应该可以。
答案 2 :(得分:0)
ReactiveForm支持dirty属性。您可以使用“ myForm.dirty”检查表单的脏状态。
否则,您可以使用getRawValue()方法将表单的初始值设置为对象属性
this.initailFormValue = this.myForm.getRawValue();
然后只需使用
订阅表单更改myForm.valueChanges.subscribe((value) => {
this.updatedFormValue = this.myForm.getRawValue();
},
(err) => {
//
}
);
现在有了初始和当前表单值。您可以比较并完成其余的操作。