检测对象何时更改Angular 5

时间:2018-08-03 14:02:00

标签: javascript angular typescript

我试图检测对象何时发生变化。该对象已连接到大型表单。每当用户更改输入时,我希望它在页面底部弹出保存/取消按钮。

我的想法是只复制对象并执行SharedPreferences,如果它们单击取消,则将数据设置为与复制对象相等。我不知道这是否是正确的方法,因为在小任务中我将使用两倍的变量,但是我只用了短时间的*ngIf="object !== object_copy"。但是,我无法使用此方法,因为每当我进行类型复制时,对象都会丢失其类型。

有人可以帮助我解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

如果您使用的是Form,则可以利用Angular的表单控件,该控件会在任何时候以任何方式更改了表单及其任何值。然后,您可以做一些简单的事情:

form.dirty

,甚至是特定字段。您可以使用Angular的反应式和模板表格来做很多事情。

https://angular.io/guide/forms

答案 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) => {
//
}
);

现在有了初始和当前表单值。您可以比较并完成其余的操作。