javascript - 如何在单击更新按钮Angular时检测表单值是否更新
问题描述
我在表单中有超过 15 个字段,如果用户在编辑模式下打开表单,并且表单的值没有更新,那么它显示消息值在单击更新按钮时没有更改。否则,如果表单值发生更改,则会显示消息“数据已更新”。
我不需要更新值,我只需要在按钮单击时检查值是否更新。
下面是我尝试过的代码,但这不适用于更新按钮单击。
HTML
<div>
<form id="editfrm" [formGroup]="Editunit">
<div>
<input type="text" formControlName="name" />
</div>
<div>
<input type="text" formControlName="code" />
</div>
</form>
</div>
<footer>
<button class="btn btn-secondary" type="reset" (click)="update(Editunit.value)">Edit</button>
</footer>
//组件.ts文件
update(Editunit?) {
this.Editunit.valueChanges.subscribe((data) => {
if(data is changed){
alert("Data updated");
}else{
alert("form not updated");
}
return;
});
}
解决方案
您可以订阅表单的 valueChanges 并使用成对检查是否有更改,否则如果您“更改”具有相同值的输入 Angular 给您更改
changed:boolean=false;
this.form.valueChanges.pipe(
takeWhile(()=>!this.changed),
startWith(this.form.value),
pairwise()
).subscribe(([old,value])=>{
let change=false;
Object.keys(old).forEach(k=>{
change=change || old[k]!=value[k]
})
this.changed=change;
})
或者简单地获取变量中的旧值,并检查值
this.oldValues={...this.form.value} //after create the form
isChanged()
{
let change=false;
Object.keys(this.oldValues).forEach(k=>{
change=change || this.oldValues[k]!=this.form.value[k]
})
return change
}
推荐阅读
- python - 函数定义和函数调用在 python 3 中产生语法错误,即使在复制和粘贴时也是如此
- hive - 查找至少包含一个与正则表达式匹配的列名的表
- c++ - std::tie 和 std::forward_as_tuple 有什么区别
- scala - 如何在 Scala 中编写柯里化函数
- azure - Azure 负载均衡器 - 平衡本地服务器
- ios - Xcode 中的 UI 元素似乎相互重叠。如何解决这个问题?
- php - 难以为 Wordpress 创建自定义 RewriteRules
- vega - 有什么好的方式来询问和回答关于 vega / vega-lite 的问题吗?
- python - Python while循环保持总运行
- javascript - 单元测试以获取角度 4 中的随机数