2016-09-20 3 views
0

я получаю следующее сообщение об ошибке при попытке инициировать контрольные значения формы в моем методе ngOnInit:Set Default Form Значения от API вызова

Ошибка

formGroup expects a FormGroup instance. Please pass one in. 

Метод

ngOnInit() { 
    this.getBusinessData().then((response:any) => { 
     this.businessForm = this.formBuilder.group({ 
      'business_name': [response.data.business_name, Validators.required], 
      'email': [response.data.email, Validators.required] 
     }); 
    }); 
} 

Мне удалось обойти это, используя setValue после возврата обещания от моего вызова службы API, например так и он работает:

ngOnInit() { 
     // Build the form 
     this.businessForm = this.formBuilder.group({ 
      'business_name' : ['', Validators.required], 
      'email' : ['', Validators.required], 
     }); 
     // Fetch data for the view 
     this.getBusinessData().then((response:any) => { 
      this.businessForm.setValue({ 
       business_name: response.data.business.business_name, 
       email: response.data.business.email 
      }); 
     }); 
    } 

Но, похоже, это не лучший способ. Как я должен привязывать данные, возвращаемые API к элементам управления формы? Похоже, я не должен использовать formGroups и, возможно, просто использовать ngModels для привязки данных к формам?

UPATE: методом micronyks, я попробовал следующее:

ngOnInit() { 
     // Bind data to the form 
     this.getBusinessData().then((response:any) => { 
      this.businessForm = this.formBuilder.group({ 
       'business_name' : [response.data.business.business_name==undefined?'': response.data.business.business_name, Validators.required], 
       'email' : [response.data.business.email==undefined?'': response.data.business.email, Validators.required] 
      }); 
     }); 
    } 

Но он возвращает следующую ошибку в консоли:

EXCEPTION: Uncaught (in promise): Error: Error in edit.template.html:12:10 caused by: formGroup expects a FormGroup instance. Please pass one in. 

Это, кажется, происходит, когда он получает завернуты вокруг вызова API. Является ли значение заменяемым?

+0

Он работает? если это так, вы просто хотите узнать лучший способ? – micronyks

+0

@micronyks мой второй метод работает, но я ищу более чистое решение. Я считаю, что должен быть лучший способ, чем запустить метод setValue для объекта formGroup. Есть ли способ связать данные внутри конструктора formBuilder после того, как обещание будет разрешено из моего вызова API? Я продолжаю получать ошибку, указанную выше, когда я пытаюсь выполнить –

+0

. Я еще не пробовал это раньше, но вы можете попробовать следующее: 'this.businessForm = this.formBuilder.group ({ 'business_name': [response.data.business.business_name == undefined? '': response.data.business.business_name, Validators.required], ... }); ' – micronyks

ответ

2

Вам необходимо установить экземпляр this.businessForm, прежде чем угловой2 отобразит вид. Решение_1: Используйте * ngIf для отображения формы только после установки экземпляра formBuilder. Solution_2: Установите formbuilder this.businessForm со значениями по умолчанию и затем обновите форму, когда получите ответ от API.