在FormGroup中使用可观察对象时的问题

问题描述 投票:0回答:1

我遇到了无法解决的问题。我有一个函数可以创建我的FormGroup,还可以创建表单字段和验证器。验证器是自定义验证器,需要可观察的值,这就是我的问题所在。当前,我在构造器部分调用创建FormGroup的函数,然后在onNgInit中创建对我的可观察对象的订阅。这样做,我的代码抱怨我从可观察到的数据未知。这是因为form函数引用的是尚未调用的内容。如果将表单函数移到可观察的代码之后,则会出现我需要FormGroup的错误。那么,什么是确保表单代码可以运行并可以访问observable返回的对象的最佳方法呢?还是最好先创建一个包含空数据的对象,以便表单可以找到值,然后让订阅对其进行更新?

 paswdProfile$: Observable<IPasswordProfile>
 paswdProfile: IPasswordProfile

    constructor(@Inject(MAT_DIALOG_DATA) public data: any, private dialogRef: MatDialogRef<PasswordComponent>,
    private adminService: AdminService, private route: ActivatedRoute, private cbLookupService: CouchbaseLookupService,
    private router: Router, private dialog: MatDialog, private toasterService: ToasterService, private fb: FormBuilder) {
this.passwordForm = this.createPasswordForm()
     }



ngOnInit() {
    this.paswdProfile$ = this.adminService.getPasswordProfile("8084ea42-633e-4c28-bc7a-372aa58a4d1c")
    this.paswdProfile$.subscribe(res => {this.paswdProfile = res[0]})
    console.log(this.paswdProfile)
}

createPasswordForm(): FormGroup {
    return this.fb.group(
      {
        oldPassword : [ null, Validators.compose([Validators.required])],
        newPassword: [
          null,
          Validators.compose([
            Validators.required,
            // check whether the entered password has a number
            CustomValidators.patternValidator(/\d/g, this.paswdProfile.numbers , {
              hasNumber: true
            })
          ])
        ],
      },
    );
angular
1个回答
0
投票

在验证器中,您可以检查可观察对象是否已经存在。如果不是,则返回null(无错误)。在安装过程中,它不会进行验证,但是验证器将不必验证任何内容,因此这没有问题。在使用表单期间,订阅将存在并因此应用您的逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.