当前位置: 首页 > 知识库问答 >
问题:

如何将validatiors添加到formcontrol,并使用反应式表单从Angle material输入matchip

杨研
2023-03-14

我正在从Angular5迁移到Angular7,我发现在同一个元素中使用ngmodel和formcontrolName在Angular6中被弃用,在Angular7中被删除。现在,我无法将验证器设置为来自角度材料的mat芯片输入

HTML:

  <div class="form-group col-md-6">
        <label class="required"> User Names
          </label>
        <mat-form-field >
          <mat-chip-list class="form-control form-control-sm" 
          [ngClass]="{'is-invalid':form.controls.names.invalid && (form.controls.names.touched || form.controls.names.dirty) }"  
          #chipList3>
            <mat-chip *ngFor="let local of form.get('names').value" [removable]="removable"
              (remove)="remove_names(local)">
              {{local}}
              <mat-icon matChipRemove *ngIf="removable">cancel</mat-icon>
            </mat-chip>
            <input [matChipInputFor]="chipList3"

              [matChipInputSeparatorKeyCodes]="separatorKeysCodes" [matChipInputAddOnBlur]="addOnBlur"
              (matChipInputTokenEnd)="add_names($event)" />
          </mat-chip-list>
        </mat-form-field>
      </div>

在迁移到角7之前,我会在输入标签中使用formControlName,如下所示

 <div class="form-group col-md-6">
        <label class="required"> User Names
          </label>
        <mat-form-field >
          <mat-chip-list class="form-control form-control-sm" 
          [ngClass]="{'is-invalid':form.controls.names.invalid && (form.controls.names.touched || form.controls.names.dirty) }"  
          #chipList3>
            <mat-chip *ngFor="let local of user.names" [removable]="removable"
              (remove)="remove_names(local)">
              {{local}}
              <mat-icon matChipRemove *ngIf="removable">cancel</mat-icon>
            </mat-chip>
            <input [matChipInputFor]="chipList3"
          formControlName="names"
              [matChipInputSeparatorKeyCodes]="separatorKeysCodes" [matChipInputAddOnBlur]="addOnBlur"
              (matChipInputTokenEnd)="add_names($event)" />
          </mat-chip-list>
        </mat-form-field>
      </div>

我做我所有的自定义验证时,用户将名称推入列表,但我想chekc是否存在或不,我使用Validators.required但现在,因为我使用formControl值本身来显示列表,我不能在模板中给出对formControlName的任何引用

TS:

 user :FormGroup =this.fb.group({
    names:[[], [Validators.required]], 
    id:0
  });

现在,即使在formControl中有值,它也不满足Validators.required

在花时间研究之后,我发现加上这个

    this.form.controls['names'].updateValueAndValidity()

满意Validators.required但现在我得到这个错误

Error: No value accessor for form control with name: 'names'

共有1个答案

呼延庆
2023-03-14

我知道你的问题是关于角度材料的,但你可以简单地用我的代码替换,但这是通过反应式表单技术和引导4显示验证来验证表单控件输入字段的最佳方法。首先,您需要为表单编写一些代码:在html部分:

  <form [formGroup]="myForm">
   <div class="form-group">
   <label for="name">first Name: </label>
   <input type="text" class="form-control" formControlName="firstName" id="name">
   <div *ngIf="firstName.touched && firstName.invalid" class="alert alert-danger">
   <div *ngIf="firstName.errors.required">filling name is required!</div>
   </div>
 </div>
 </form>

在ts文件中,您应该实现进行验证的逻辑。

在ts文件中:

  myForm = new FormGroup({
  'firstName':new FormControl('',Validators.required)

  })
    //getter method
   get firstName(){
   this.myForm.get('firstName');
   }

现在您可以看到验证正在工作。现在,要为输入字段指定样式以显示无效输入周围的红色边框,只需转到组件的css文件并将此类添加到css文件:

    /// invalid
  .form-control.ng-touched.ng-invalid{border:2px solid red;}

   ///valid
    .form-control.ng-touched.ng-invalid{border:2px solid green;}       

使用这种技术不需要使用ng类。

 类似资料:
  • 我试图测试登录功能https://www.expedia.com/网站使用Selenium WebDriver与Java。我也使用页面对象工厂设计模式。 登录的步骤是:转到上面的网站- 以下是我处理Expedia登录表单的代码: 登录页面。java包含: } TC_LoginTest_001。java包含: { } 当我使用run As运行脚本时-- 未在输入字段中输入测试数据(即电子邮件地址和密

  • 我读过许多关于动态添加字段集的博客和帖子,但它们都给出了非常复杂的答案。我要求的不是那么复杂。 我的HTML代码: 因此,用户将在字段中输入一个整数值(我正在使用javascript检查验证)。点击链接,会出现相应数量的输入字段供他输入。我想用javascript实现这一点。 我不是javascript方面的专家。我在想如何通过链接检索用户在字段中填写的整数,并显示相应数量的输入字段。

  • 这是当前的代码:从'@angull/core'导入{Component,OnInit,OnDestroy};从'AngularFire2/FireStore'导入{AngularFirestore,AngularFirestoreCollection};从'AngularFire2/Database'导入{AngularFireDatabase};从'AngularFire2/Auth'导入{An

  • 我想使用XSL编码在XML开始时添加样式表标记 输入XML:

  • 本文向大家介绍使用CSS向表单输入添加背景色,包括了使用CSS向表单输入添加背景色的使用技巧和注意事项,需要的朋友参考一下 要将背景色添加到表单输入中,请使用 background-color属性。 您可以尝试运行以下代码以实现背景颜色属性以形成 示例

  • 问题内容: 如何将字形图标添加到文本类型输入框?例如,我想在用户名输入中包含“ icon-user”, 问题答案: 没有引导程序: 我们将稍后介绍Bootstrap,但这是基本的CSS概念,您可以自己做。正如猎物所指出的那样,您可以通过将CSS绝对放置在输入元素内部的图标来使用CSS。然后在任一侧添加填充,以使文本不会与图标重叠。 因此,对于以下HTML: 您可以使用以下CSS左右对齐字形: De