2

Angular 2でオブザーバブルからフォームを作成する正しい方法は何ですか?

現時点では、半分の作業状況があります。初めてフォームにアクセスしたときにデータが入力されましたが、フォームから戻ってページに再度アクセスすると、データがなくなりました。

成分

export class ProfileEditComponent implements OnInit {
  user: FirebaseObjectObservable<UserProfile>;
  form: FormGroup;
  error = false;
  errorMessage = '';

  constructor(private authService: AuthService, private fb: FormBuilder) { }

  ngOnInit() {
    this.authService.getUserProfile().subscribe(data => {
      this.user = <FirebaseObjectObservable<UserProfile>>data;
      console.log('user', this.user)

      this.user.subscribe( (resp) => {
        this.form.patchValue(
          {
            company: resp.company
          }
        )
      })

    });

    this.form = this.fb.group({
      company: ['', Validators.required],
    });
  }

  onEdit() {
    this.authService.editUserProfile(this.user, this.form.value);
  }
}

テンプレート

  <h2>Profile edit component</h2>
  <a [routerLink]="['/profile']">cancel</a>

  <form [formGroup]="form" (ngSubmit)="onEdit()">
      <div class="form-group">
          <label for="company">Company</label>
          <input 
            formControlName="company" 
            type="company" 
            id="company" 
            #company 
            class="form-control" 
            >
          <span *ngIf="!company.pristine && company.errors != null && company.errors['noCompany']">No Company name</span>
      </div>

      <button type="submit" [disabled]="!form.valid" class="btn btn-primary">Change profile</button>
  </form>
4

1 に答える 1

2

これが役立つかどうかはわかりませんが、フォームが最初に正常にロードされるという同様の問題に直面しましたが、アプリをナビゲートすると問題が発生し始めたため、フォームの初期化コードを ngOnInit から ActivatedRoute パラメータのリスナーに移動する必要がありました変化します。これに沿った何か

export class ProfileEditComponent implements OnInit {
    user: FirebaseObjectObservable<UserProfile>;
    form: FormGroup;
    error = false;
    errorMessage = '';

    constructor(private authService: AuthService, private fb: FormBuilder, private route:ActivatedRoute) { }

    ngOnInit() {
        this.route.params.subscribe(this.onParamsChange.bind(this))
    }

    onParamsChange() {
        this.authService.getUserProfile().subscribe(data => {
            this.user = <FirebaseObjectObservable<UserProfile>>data;
            console.log('user', this.user)

            this.user.subscribe( (resp) => {
                this.form.patchValue(
                    {
                        company: resp.company
                    }
                )
            })

        });

        this.form = this.fb.group({
            company: ['', Validators.required],
        });
    }

    onEdit() {
        this.authService.editUserProfile(this.user, this.form.value);
    }
}
于 2016-10-29T18:26:52.677 に答える