[英]how to select and deselect checkbox using reactive forms in angular8
[英]How to compare array of objects using angular8 using reactive forms
我使用了反应形式,并且值被分配给了 html,反应形式是由于对象数组。 因此,我在那里执行的任何操作都必须用于将对象与现有对象进行比较。 所以我使用了一组对象比较方法。 但是这里以前的值也被绑定到分配给表单的新值。
我希望新编辑的值和旧值分开,以便我可以比较对象属性值是否不同,然后我可以启用保存。
演示: 演示
TS:
saveDetails() {
this.objectsAreSame(this.agentDetailsList, this.detailsToggle)
console.log(this.agentDetailsList);
console.log(this.detailsToggle);
console.log(this.objectsAreSame,"this.objectsAreSame")
}
objectsAreSame(a1, a2) {
for (var i = 0, len = a1.length; i < len; i++) {
for (var j = 0, len = a2.length; j < len-1; j++) {
if (a1[i].boolValue == a2[j].boolValue) {
return false
} else {
return true
}
}
}
}
形式:
private settingsInfoForm() {
if (!this.agentDetailsList) {
// Add
this.agentSettingsInfoForm = this.FB.group({
agentToogles: this.FB.array([this.detailsToggle]),
});
// this.authService.setDetailsData(this.agentSettingsInfoForm);
} else {
// Edit
if (this.agentDetailsList) {
this.detailsToggle = this.agentDetailsList
this.agentSettingsInfoForm = this.FB.group({
agentToogles: this.FB.array([this.detailsToggle]),
})
}
let settingsInfo = this.agentSettingsInfoForm.valueChanges.subscribe(data => {
this.formEdit = true;
console.log('agentSettingsInfoForm', this.formEdit)
})
}
您可以使用Array.prototype.reduce
函数来比较对象。 它循环遍历第一个数组的所有元素,并从初始值true
。 如果具有当前索引的项目存在于第二个数组中,则它返回所有先前比较与index
处的当前元素的重叠。 如果它不存在,则返回 false。 一旦一个值为false
,结果为false
。
compare(
array1.map(item => item.boolValue),
array2.map(item => item.boolValue)
);
function compare(arr1: Array<boolean>, arr2: Array<boolean>) {
return arr1.reduce((acc, cur, index) => acc && cur === arr2[index], true);
}
我试图理解你的代码,这对我来说有点困难,因为我对 Angular 也很陌生。
Angular 中的反应形式是一个与 observables 一起工作的最佳概念。 在检查 FormGroups 中的更改时,RxJs 似乎是必不可少的: https ://rxjs-dev.firebaseapp.com/api
可观察的角度文档: https : //angular.io/guide/observables
我知道理解文档并不容易。
在代码中,我试图向您展示如何通过 Formbuilder 启动 FormGroups 并监听表单中的更改。 在订阅部分,您会看到我与您的对象的比较并将日志记录到控制台。
我希望我能帮助你。 欢迎在评论中提问。 StackDemo: https ://stackblitz.com/edit/angular-58vovb
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.