Mam więc złożony formularz do tworzenia encji i chcę go również użyć do edycji. Używam nowego API formularzy kątowych. Skonstruowałem formularz dokładnie tak, jak dane, które pobieram z bazy danych, więc chcę ustawić wartość całego formularza na dane pobrane tutaj jest przykładem tego, co chcę zrobić:
this.form = builder.group({
b : [ "", Validators.required ],
c : [ "", Validators.required ],
d : [ "" ],
e : [ [] ],
f : [ "" ]
});
this.form.value({b:"data",c:"data",d:"data",e:["data1","data2"],f:data});
PS: NgModel nie działa z nowymi formularzami API, również nie mam nic przeciwko używaniu jednokierunkowego wiązania danych w szablonie, jak w
<input formControlName="d" value="[data.d]" />
to działa, ale w przypadku tablic byłoby to uciążliwe
angular
angular2-forms
Amgad Serry
źródło
źródło
Odpowiedzi:
Aby ustawić wszystkie wartości FormGroup , setValue :
Aby ustawić tylko niektóre wartości, użyj patchValue :
W przypadku tej drugiej techniki nie trzeba podawać wszystkich wartości, a pola, których wartości nie zostały ustawione, nie zostaną zmienione.
źródło
W przypadku wartości ustawionej, gdy formant jest FormGroup, można użyć tego przykładu
źródło
Tak, możesz użyć setValue do ustawienia wartości do celów edycji / aktualizacji.
Możesz zapoznać się z http://musttoknow.com/use-angular-reactive-form-addinsert-update-data-using-setvalue-setpatch/, aby dowiedzieć się, jak używać formularzy reaktywnych do dodawania / edycji funkcji za pomocą setValue. To zaoszczędziło mi czasu
źródło
Możesz użyć form.get, aby uzyskać określony obiekt kontrolny i użyć setValue
źródło
Jak wskazano w komentarzach, ta funkcja nie była obsługiwana w momencie zadawania tego pytania. Ten problem został rozwiązany w Angular 2 rc5
źródło
Zaimplementowałem tymczasowe rozwiązanie do czasu wsparcia formularza angular2 updateValue
stosowanie:
Uwaga: formularz i dane muszą mieć tę samą strukturę i użyłem lodash do głębokiego klonowania jQuery i inne biblioteki również mogą to zrobić
źródło
To nieprawda. Wystarczy, że użyjesz go poprawnie. Jeśli korzystasz z formularzy reaktywnych, NgModel powinien być używany zgodnie z dyrektywą reaktywną. Zobacz przykład w źródle .
Chociaż wygląda na to z komentarzy do TODO , prawdopodobnie zostanie to usunięte i zastąpione reaktywnym interfejsem API.
źródło
FormControlName
Wyraźnie dodaje go jako@Input()
. Zobacz źródło, z którym się łączyłem. Gdyby nie było tych wykluczających selektorów, to w powyższym przykładzie zostałby utworzony NgModel, którego nie chcesz.FormControlDirective
([formControl]
), jak iFormControlName
(formControlName
). JeślingModel
jest używany bez jednego z nich, zakłada się, że będziesz używać deklaratywnych formularzy iNgModel
zostanie utworzony plik . JeślingModel
jest używane razem z jedną z dyrektyw form reaktywnych , to ta dyrektywa formy reaktywnej będzie obsługiwać model, a nieNgModel