创建一个与ngModel绑定时不反映更改的变量

时间:2018-12-26 14:00:05

标签: angular typescript

我有一个对象数组,所有对象的“名称”属性都有唯一的值,并且有一个输入字段,用户可以在其中更新对象的“名称”属性。

我想设置一个限制,即更新后的值也应该是唯一的,即不应与其他对象的“名称”属性重复。

所以我实现了一个验证函数,该函数从输入字段获取值并将其与所有对象数组的“ name”属性匹配。

在创建新对象时,它工作正常,但在更新的情况下,即使首次创建DOM也不起作用,因为它的名称已经存在于数组对象中。所以我在验证函数中做了一些更改,在更新值,它获取输入字段的值并将其从对象数组中删除,以使name属性不能与自己的名称重复。

但是问题是对象是与输入字段的双向绑定,因此每次用户输入值时,都会从数组对象中删除相同的值。因此验证逻辑出错。我只需要它的第一时间值,这样我就可以从数组中删除它。但是捕捉值也会随着输入值的改变而改变

nameControl = new FormControl('', [Validators.required]
  , this.ValidateNameDuplication.bind(this));



ValidateNameDuplication(control: AbstractControl) {

  return this._callServices.getMreAttributes().pipe(map(
    e => {
  const attrs = e;

  const attrIndex = attrs.findIndex(e => e.name == this.newAttr.name);
  attrs.splice(attrIndex, 1);

   if (attrs.find(e => e.name.toLowerCase() == control.value.toLowerCase())) {
    return { validName: true };
   }
  }
 }
));

 return null;
}

我的输入字段如下:

 <input class="form-control" matInput
 placeholder="Name" [formControl]="nameControl" name="N" [(ngModel)]="newAttr.name"
             required>

0 个答案:

没有答案