【问题标题】:Property 'controls' does not exist on type 'AbstractControl'."“AbstractControl”类型上不存在属性“控件”。”
【发布时间】:2023-03-03 22:48:01
【问题描述】:

问题背后的原因是什么>?

“AbstractControl”类型上不存在属性“控件”

#html代码

<div class="form-group row" formGroupName="passwords">
    <label for="" class="col-sm-2 col-form-label">Password</label>
    <div class="col-sm-10">
      <input type="password" class="form-control" formControlName="password"
        [class.is-invalid]="registerForm.controls.passwords.controls.password.touched && registerForm.controls.passwords.controls.password.invalid">

      <password-strength-meter [password]="registerForm.controls.passwords.controls.password.value"
        (strengthChange)="onStrengthChange($event)">
      </password-strength-meter>

      <div *ngIf="registerForm.controls.passwords.controls.password.touched">
        <div class="text-danger"
          *ngIf="registerForm.controls.passwords.controls.password.touched && registerForm.controls.passwords.controls.password.hasError('required')">
          Password is required</div>
      </div>
    </div>
  </div>

#代码

public registerForm = this.fb.group({
    email     : ['', 
                [Validators.required, Validators.email], 
                [
                  // this.isEmailUnique.bind(this),
                  // DuplicateEmailValidator(this.apiService)
                ] //async validator(used as  in view)
              ],
    passwords : this.fb.group({
      password        : ['', Validators.compose([Validators.required])],
      confirmPassword : ['', Validators.compose([Validators.required])]
    }, {
  }),
});

【问题讨论】:

    标签: angular typescript


    【解决方案1】:

    您可以在 .ts 文件中为 passwords 组创建一个 getter。

    registerForm: FormGroup;
    
    public get passwordsGroup(): FormGroup {
        return this.registerForm.get('passwords') as FormGroup;
      }
    
    constructor(private fb: FormBuilder) { }
    
    ngOnInit() {
      this.buildForm();
    }
    
    buildForm() {
     this.registerForm = this.fb.group({
        email     : ['', 
                    [Validators.required, Validators.email], 
                    [
                      // this.isEmailUnique.bind(this),
                      // DuplicateEmailValidator(this.apiService)
                    ] //async validator(used as  in view)
                  ],
        passwords : this.fb.group({
          password        : ['', Validators.compose([Validators.required])],
          confirmPassword : ['', Validators.compose([Validators.required])]
        }, {
      }),
    });
    }
    

    然后在 HTML 中

    <password-strength-meter [password]="passwordsGroup?.get('password')?.value"
            (strengthChange)="onStrengthChange($event)">
          </password-strength-meter>
    

    OR(应该可以,需要测试)

    <password-strength-meter [password]="passwordsGroup?.value?.password"
            (strengthChange)="onStrengthChange($event)">
          </password-strength-meter>
    

    【讨论】:

    • 无法读取 LoginComponent.get passwordsGroup [as passwordsGroup 处未定义的属性“get”
    • 我更新了答案,将您的 FormGroup 设置为 init,看看是否有帮助。
    • 我还在 HTML 端添加了空检查 ?
    • 先生,我想添加最后一个帮助,我想实现一个像这样imgur.com/a/rm63auy 的密码检查器先生,而不是米先生,我想使用一个检查图标和文本,默认颜色是灰色,例如,当用户输入 8 个字符时,至少需要 8 个字符,复选框和文本将为绿色,因此如果用户输入大写等等,检查器的其余部分就像一个大写,我有我的 stackblitz.com/edit/…先生,但我无法做到这一点,也许您可​​以帮助我先生。谢谢。
    • 我只想用复选框替换仪表先生
    猜你喜欢
    • 2018-11-05
    • 1970-01-01
    • 2018-01-26
    • 2021-08-13
    • 1970-01-01
    • 2019-03-07
    • 2019-04-11
    • 2019-10-10
    • 1970-01-01
    相关资源
    最近更新 更多