javascript - 监听对象更新 Angular 的变化
问题描述
我有一个像这样直接更新对象的表单
组件.html
<input type="text" [(ngModel)]="user.name" />
<input type="text" [(ngModel)]="user.surname" />
<input type="text" [(ngModel)]="user.age" />
组件.ts
user = {
name: null,
surname: null,
age: null
}
现在在我的 component.html 中,我有一个保存按钮,它位于子组件中
<app-save-btn [user]="user"></app-save-btn>
并在app-save-btn
我正在使用的组件中监听更改OnChanges
@Input() user: User;
userForCompare: User;
ngOnChanges() {
if (!this.userForCompare) {
this.userForCompare = {...this.user};
}
console.log(this.userForCompare, this.user);
}
现在我的问题是,我得到了两个用户对象的第一个控制台日志,但是当我更新更多字段时,我不再得到更改更新..
现在我知道我可以创建单独的变量来保存每个值,但是我有 30 个字段项,所以我不想改变我的实现太多......
任何帮助,将不胜感激
解决方案
@Input
只有当 Input 对象发生突变时,属性才会触发ngOnChanges函数。
在您的示例中,输入字段正在改变同一个用户对象中的每个单个属性,用户对象@Input
总是引用同一个对象(即使它的子属性名称、surename 和年龄发生了变化),所以ngOnChanges
不会被触发。
this.user
因此,每当更改任何输入字段时,您都必须使component.ts
等于一个全新的用户对象。
希望能帮助到你!
推荐阅读
- html - 使用 flexbox,努力让 justify-content 对齐对象在中心
- elasticsearch - AWS托管弹性搜索不允许`_render/template`请求?
- sorting - 如何比较 google protobuf ByteString
- python - 将列表与列表列表进行比较
- angular - 尝试构建时 Angular 8 到 9 升级错误
- java - jUnit 模拟 ModelMapper
- python - 我将如何检查一个列表是否以相同的顺序在另一个列表中?
- php - 使用 preg_match_all() 字符串中多个开放式短语的正则表达式
- r - R 根据一个数据集中的列信息/条件将行值替换为其他行?
- ruby-on-rails - QuickSight 和 Ruby 集成,无法在 RoR 应用程序中显示图形