微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

@ViewChild的WorkAround无法读取未定义的ngModel的属性“控件”,您有更好的主意吗?

如何解决@ViewChild的WorkAround无法读取未定义的ngModel的属性“控件”,您有更好的主意吗?

大家好,我在从@ViewChild访问“控件”时遇到问题,为了帮助别人,我决定写这篇文章,为了找到NgModel的“控件”,我找到了解决方法

如果要获取“ email.control”的未定义对象:

@ViewChild('email',{static: true}) public email: NgModel;

我只是决定跳过这种方式,我不是通过“ @ViewChild”在ts文件调用email(NgModel)的“控件”,而是直接从html发送它:

    <input matInput name="email" id="masterdata-email" type="email" #email="ngModel" [(ngModel)]="masterData.email" required>
        <span *ngIf="initEmailValidator(email['control'],masterData.email)"></span>
<mat-error *ngIf="email['control']?.errors?.conflict">
              {{conflict}}
          </mat-error>
          <mat-error *ngIf="email['control']?.errors?.required">
              {{'email'}}
          </mat-error>
          <mat-error *ngIf="email['control']?.errors?.email">
              {{'email'}}
          </mat-error>

然后在ts文件中,我可以执行我想做的任何事情,我想检查电子邮件是否有效等。

private initEmailValidator(email: FormControl,initialEmailValue: string) {
        const emailControl = email;
        if (initialEmailValue && initialEmailValue.length > 0) {
            emailControl.setValidators([this.emailBackendValidator,this.emailConflictingValidator,Validators.email,Validators.required]);
        } else {
            emailControl.setValidators([this.emailBackendValidator,Validators.email]);
        }
    }

我花了一些时间在不使用@ViewChild的情况下解决此问题,希望这会对某人有所帮助,如果您知道更好的方法,请在下面写下评论

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。