javascript - 动态改变 Angular 2 Validators.maxLength 的 maxLength 值

标签 javascript validation angular

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

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

但是,在更改 maxMsgLength 后,验证器将坚持使用旧的 maxMsgLength 值。是否有一种方法可以使用新的 maxLength 值重新启动此验证字段的验证?

代码: 类帐户{ 最大消息长度 = 200; 新帐户:表单组;

//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>

最佳答案

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

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

关于javascript - 动态改变 Angular 2 Validators.maxLength 的 maxLength 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40588357/

相关文章:

javascript - 滚动时透明导航栏出现问题

javascript - Scroll-lock/You click->你可以向下滚动

validation - 如何为添加的 ScriptMethod 成员强制执行参数?

javascript - 如何正确地将base64编码的图像上传到文件服务器?

angular - 拦截输入属性更改的命名约定

javascript - 无效的 JSON 解析器错误

javascript - 如何在 AngularJS 指令中重新渲染模板?

javascript - 将 View 模型映射到 KnockoutJS 验证

angular - 如何在 MD-selection-list Angular2 中设置选中元素的最大限制

html - 使用 Angular2 DevExtreme 显示和隐藏表单元素