Перенаправление на URL-адрес с параметрами запроса и присвоение значений реактивной форме из параметров запроса не работает – Angular

Я перенаправляю URL-адрес с параметрами запроса и присваиваю значения из параметров запроса форме, используя setValue, но значение не отображается изначально, а отображается после обновления.

Получение значений из параметров запроса и присвоение форме:

constructor(private fromBuilder: FormBuilder, private _API: RestService, private storageService: StorageService, private route: ActivatedRoute) {

    if (!this.formsInitialized) this.initForms()

    this.route.queryParams.subscribe((params) => {

      if (params.user) {
        this.registerForm['controls']['cpName'].setValue(JSON.parse(decodeURIComponent(params.user)).name, { onlySelf: false })
        this.registerForm['controls']['cpEmail'].setValue(JSON.parse(decodeURIComponent(params.user)).email, { onlySelf: false })
      }

    })

  }

  ngOnInit() {
  }

  initForms() {

    this.formsInitialized = true

    this.registerForm = this.fromBuilder.group({
      cpName: ['dfdfd', [Validators.required, Validators.minLength(4), Validators.maxLength(30), Validators.pattern(this.namePattern)]],
      cpEmail: ['', [Validators.required, Validators.pattern(this.emailPattern)]],
      dname: ['', [Validators.required, Validators.maxLength(15), Validators.pattern(this.domainPattern)]],
      bname: ['', [Validators.required, Validators.maxLength(50), Validators.pattern(this.brandPattern)]],
      password: ['', [Validators.required, Validators.minLength(6), Validators.maxLength(15)]],
      token: [''],
      googleId: [''],
      imageUrl: [''],
    });

  }

person Rakesh Vangari    schedule 17.09.2019    source источник
comment
Вы пытались подписаться на параметры запроса в ngOnInit?   -  person Ramesh Reddy    schedule 17.09.2019
comment
Пробовал, но результат тот же   -  person Rakesh Vangari    schedule 17.09.2019
comment
Ваш код выглядит довольно хорошо, не могли бы вы воспроизвести его в stackblitz?   -  person AJT82    schedule 17.09.2019


Ответы (1)


Попробуйте инициализировать форму перед установкой значений:

this.route.queryParams.subscribe((params) => {

      if (params.user) {
      this.initForms();
        this.registerForm['controls']['cpName'].setValue(JSON.parse(decodeURIComponent(params.user)).name, { onlySelf: false })
        this.registerForm['controls']['cpEmail'].setValue(JSON.parse(decodeURIComponent(params.user)).email, { onlySelf: false })
      }

    });
person Ramesh Reddy    schedule 17.09.2019