具有默认值的Angular 4验证

时间:2017-10-22 19:04:12

标签: angular

我正在努力进行角度4的验证。 我有一个组件,它由父组件提供的输入填充。我已经对特定的文本框进行了验证,该文本框由输入对象填充(由父组件给出)。 Angular将输入视为错误 下面是我的标记

<mat-form-field class="fill-control">
    <input matInput placeholder="link" value="{{feed.link}}" formControlName="link" required>
</mat-form-field>
<mat-error *ngIf="!moderateFeedForm.controls['link'].valid && moderateFeedForm.controls['link'].touched">
    Please enter a valid url
</mat-error>

在我的组件的构造函数中,我有以下代码

this.moderateFeedForm = this.fb.group({
      'link':['',Validators.compose([Validators.required])]],
})

在我的表格中,我有很多其他领域,所有人的行为都是一样的,我刚刚在这里放了一个。没有编译错误,但是当我对文本框进行聚焦和取消聚焦时,我得到以下错误

  

“错误:ExpressionChangedAfterItHasBeenCheckedError:Expression有   检查后改变了。上一个值:'null'。当前值:   '垫错误-0'“

对我来说,好像在填充值之前应用了验证,或者某些验证器不知道这些值。当我只是编辑值并再次使用相同的值时,验证将被传递。

这里发生了什么错误?

3 个答案:

答案 0 :(得分:0)

在模板中,您应该从输入标记中删除所需的指令。

答案 1 :(得分:0)

尝试将您的0替换为``* ngIf =&#34;无效(&#39;链接&#39;)&#34;`。

然后在component.ts文件中添加一个方法:

*ngIf="!moderateFeedForm.controls['link'].valid && moderateFeedForm.controls['link'].touched"

您还可以从代码中删除invalid(control) { return !moderateFeedForm.controls[control].valid && moderateFeedForm.controls[control].touched; } 子句,然后只需Validators.compose

答案 2 :(得分:0)

最后我想通了。我给出了错误的初始值。在我的组件中,我必须将其初始化为

this.form= this.fb.group({[initialval], [validations...]})