angular - 重置表单后无法第二次将值设置为反应式表单
问题描述
使用响应式表单,当我们单击编辑特定用户时,使用 setValue 方法填充到表单控件中。然后,当我单击保存按钮时,我正在使用 reset() 方法清除表单。
现在,如果单击另一个用户的编辑按钮,我将填充与上面相同的数据,但 setValue 或 patchValue 不会将数据添加到表单字段中
解决方案
您的问题与Change Detection相关。
您的代码有问题:
您正在将值从父组件发送到子组件,并且您正在调用您的edit
方法,ngOnChanges
该方法将在 Angular Change Detection 期间运行。
在您的父组件edit
方法中,您有:
edit(user){
this.user = user;
console.log(this.user);
}
现在,如果您单击相同的用户编辑按钮,this.user
则不会更改,也不会触发ngOnChanges
子组件的方法,并且不会填充表单。
解决方案:(您可以在此处找到工作的 stackbliz 演示 )
即使您单击同一个用户编辑按钮并手动触发更改检测,您也需要每次更改用户的值。
import { Component } from '@angular/core';
import { FormGroup, Validators, FormBuilder} from '@angular/forms';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
constructor(private formBuilder: FormBuilder, private cd: ChangeDetectorRef){
}
edit(user){
this.user = null;
this.cd.detectChanges();
this.user = user;
console.log(this.user);
}
}
您的ngOnChanges
遗嘱如下所示:
ngOnChanges(){
if(this.user) {
this.edit();
}
}
希望能帮助到你。
推荐阅读
- logging - 理解 kafka log.dirs
- macos - 如何在 android studio 窗口顶部获取 AVD 模拟器
- api - Azure API 管理总是返回 404 资源未找到
- java - 无法检查 JDBC 自动提交模式,连接已关闭错误
- flutter - 如何在颤动的Listview中显示字符串列表
- amazon-web-services - 如何根据条件在 terraform 中动态替换变量的值
- javascript - MomentJS inBetween 总是返回 false
- php - php laravel 多次为表创建模型实例
- php - 允许客户在 WooCommerce 中设置产品价格并通过某些验证添加到购物车
- wordpress - Elementor wordpress - 第一部分在移动设备中不可见