Как вызвать изменение значения конструктора угловых форм после начальной загрузки - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть форма, которая синхронизируется с базой данных Firestore.Теперь, когда кто-то меняет значение поля «Национальность», я хочу запустить некоторые дальнейшие действия, например:

this.profileFormStageOne.get('nationality').valueChanges.subscribe(val => {
      if (val && val === 'Other') {
        let alert = this.alertCtrl.create({
          title: 'Your Nationality',
          inputs: [
            {
              name: 'nationality',
              placeholder: 'Your Nationality e.g. Brazilian',
            },
          ],
          buttons: [
            {
              text: 'Update Nationality',
              handler: data => {
                this.manualNationality = data.nationality;
                console.log(this.manualNationality);
              },
            },
          ],
        });
        alert.present();
      }
    });

Однако я также использую ngOnChanges () для исправления значений с помощью формы, например:

  /**
   * Get initial form values
   * Needs to run from ngOnChanges because User in an input & is not ready in constructor
   */
  ngOnChanges() {
    if (this.User) {
      const profile: Profile = this.User.profile;

      this.profileFormStageOne.patchValue({
        nationality: profile.nationality,

Проблема заключается в том, что это вызывается при начальном рендеринге (во время значения патча), если в поле «Национальность» уже установлено «другое».

Существуют ли альтернативные подходы или способы запускавыбрать изменение?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

сделайте так, в Angular 6

сначала создайте геттер

get nationality() {
       this.profileFormStageOne.get('nationality');
 }

сейчас

 this.nationalityChange = this.nationality.valueChanges.subscribe((value: string) => {
            if (value === 'other') {
              // do your requirement
            }
            this.nationality.updateValueAndValidity();
        });

вы должны вызвать метод pathValue() для установкизначение по умолчанию в ngAfterViewInit() перехватывает

и не забудьте отписать наблюдаемое

ngOnDestroy() {
        this.nationalityChange.unsubscribe();
    }
0 голосов
/ 19 декабря 2018

Вы можете подписаться на изменения по национальности, например так:

     this
      .profileFormStageOne.controls['nationality'].valueChanges.subscribe(()=> {
   // your login
 })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...