【问题标题】:Issue with angular 2 ngControl's minlength errors validatorangular 2 ngControl 的 minlength 错误验证器存在问题
【发布时间】:2016-09-11 08:11:42
【问题描述】:

我有以下 angular 2 形式:

<form (ngSubmit)="updateFirstName()" #firstNameForm="ngForm" novalidate>
    <div class="form-group" ng-class="getCssClasses(formCtrl, formCtrl.firstName)">
        <div class="input-group">
            <input type="text"
                   ngControl="firstName"
                   #firstName="ngForm"
                   required
                   minlength="2"
                   maxlength="35"
                   pattern_="FIRST_NAME_PATTERN"
                   [ngModel]="currentUserAccount?.firstName"
                   (ngModelChange)="currentUserAccount ? currentUserAccount.firstName = $event : null"
                   placeholder="{{'FIRST_NAME_FORM.NEW_FIRST_NAME'| translate }}"
                   class="form-control"/>
        </div>

        <div [hidden]="firstName.valid">
            <div *ngIf="firstName.errors.minlength" class="control-label">{{'FIRST_NAME_FORM.MIN_LENGTH'| translate}}</div>
        </div>
    </div>
    <div class="form-group">
        <button type="submit" class="btn btn-primary pull-right" [disabled]="buttonDisabled">{{'FIRST_NAME_FORM.SUBMIT'| translate}}</button>
        <a [routerLink]="['/dashboard/useraccount']" class="btn btn-link pull-right text-right">{{'FORM_CANCEL' | translate}}</a>
    </div>
</form>

但是,当我在浏览器中加载表单时出现以下错误,似乎错误为空:

TypeError: Cannot read property 'minlength' of null

我在这里做错了什么?

在模板中声明性使用 minlength 属性是否不够?

是否有另一种方式来声明 minlength 验证器而不是以编程方式,即

this.name = new Control('', Validators.minLength(4));

?

【问题讨论】:

  • 也许你需要像这样使用 elvis 运算符 *ngIf="firstName?.errors?.minlength"
  • 为什么不将其添加为答案,然后@balteo 可以接受并将问题标记为已回答?

标签: angular angular2-forms


【解决方案1】:

我也遇到过同样的问题,即TypeError: Cannot read property 'minlength' of null。对我来说,@yurzui 提出的解决方案解决了这个问题。我在这里添加它作为答案(正如@günter-zöchbauer 所建议的那样),以便其他人(可能不阅读 cmets)可以轻松找到它。

问题:

minlength 属性可以在定义 errors 之前被访问:

<div *ngIf="firstName.errors.minlength">
    Too short
</div>

解决方案:

使用? 运算符确保在访问minglength 属性之前定义了errors

<div *ngIf="firstName.errors?.minlength">
    Too short
</div> 

替代解决方案:

将您的 div 包装在另一个 div 中,检查是否定义了 errors

<div *ngIf="firstName.errors">
    <div *ngIf="firstName.errors.minlength">
        Too short
    </div> 
</div>

请注意,这两种解决方案都假定已定义 firstName

PS:对于任何需要它的人,同样适用于errors.maxlength

【讨论】:

    【解决方案2】:

    // 这样它对我有用

    <div *ngIf="firstName?.errors?.minlength">
    
    </div> 
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-30
    • 2016-10-27
    • 2018-01-02
    • 2022-11-05
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多