Javascript 动态更改angular 2验证程序的maxLength值。maxLength

Javascript 动态更改angular 2验证程序的maxLength值。maxLength,javascript,validation,angular,Javascript,Validation,Angular,在表单组验证中,我尝试应用输入最大长度,然而,这个最大长度取决于表单中的其他操作。如果它们发生更改,也会更改maxMsgLength属性的值 msg:['',Validators.maxLength(this.maxMsgLength)] 但是,在更改maxMsgLength后,验证程序将坚持使用旧的maxMsgLength值。是否有方法使用新值maxLength重新启动此验证字段的验证 代码: 类别帐户{ maxMsgLength=200; 新帐户:FormGroup //activated

在表单组验证中,我尝试应用输入最大长度,然而,这个最大长度取决于表单中的其他操作。如果它们发生更改,也会更改maxMsgLength属性的值

msg:['',Validators.maxLength(this.maxMsgLength)]

但是,在更改maxMsgLength后,验证程序将坚持使用旧的maxMsgLength值。是否有方法使用新值maxLength重新启动此验证字段的验证

代码: 类别帐户{ maxMsgLength=200; 新帐户:FormGroup

//activated by click on another method
    private changeMaxMsgLength() : void {
    let values = Object.values(this.accountsStorage);
    if(values.includes("oldAccount")) {
      this.maxMsgLength = 150;
    } else {
      this.maxMsgLength = 200;
    }
  }

  ngOnInit(): void {
    this.newAccount = this.formbuilder.group({
      msg         : ['', Validators.maxLength(this.maxMsglength)],
      link        : ['', Validators.pattern('^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$')],
      schedule    : ['', Validators.pattern('^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5][0-9]$')]
    });

  }

} 
 //where in template there is 


<div class="form-group">
    <label for="name">Message</label>
    <textarea class="form-control" id="Message" formControlName="msg" style="width: 300px; height: 150px;"></textarea>
</div>
<div class="error" *ngIf="newAccount.get('msg').hasError('maxlength')">
    Maximum of {{maxMsglength}} characters
</div>
//通过单击其他方法激活
私有更改MaxMsgLength():void{
让values=Object.values(this.accountsStorage);
if(价值包括(“旧账户”)){
此参数为.maxMsgLength=150;
}否则{
此参数为.maxMsgLength=200;
}
}
ngOnInit():void{
this.newAccount=this.formbuilder.group({
msg:['',Validators.maxLength(this.maxMsglength)],
链接:['',Validators.pattern('^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w\.-]*)*\/?$)],
附表:['',Validators.pattern('^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])(2[0-3]|[01][0-9]):[0-5][0-9]$]
});
}
} 
//模板中有什么
消息
{{maxMsglength}个字符的最大值

您可以使用html输入的
maxlength
属性:

<input [attr.maxlength]="maxMsgLength" />

找到了答案!:D、 需要使用AbstractControl中的方法SetValidator:

  newAccount.controls['msg'].setValidators(Validators.maxLengt‌h(this.maxMsglength)‌​)

方法覆盖以前的验证器,并使用更新的maxMsgLenth值设置new也不起作用。newAccount.controls['msg'].updateValueAndValidity();