Así que tengo una forma compleja para crear una entidad y también quiero usarla para editar. Estoy usando una nueva API de formas angulares. Estructuré el formulario exactamente como los datos que recupero de la base de datos, por lo que quiero establecer el valor de todo el formulario en los datos recuperados. Aquí hay un ejemplo de lo que quiero hacer:
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});
PD: NgModel no funciona con la nueva API de formularios y no me importa usar el enlace de datos unidireccional en la plantilla como
<input formControlName="d" value="[data.d]" />
Eso funciona, pero sería una molestia en el caso de las matrices
angular
angular2-forms
Amgad Serry
fuente
fuente
Respuestas:
Para establecer todos los valores de FormGroup, use setValue :
Para establecer solo algunos valores, use patchValue :
Con esta segunda técnica, no es necesario proporcionar todos los valores y los campos cuyos valores no se establecieron no se verán afectados.
fuente
Para establecer un valor cuando su control es FormGroup, puede usar este ejemplo
fuente
Sí, puede usar setValue para establecer un valor con fines de edición / actualización.
Puede consultar http://musttoknow.com/use-angular-reactive-form-addinsert-update-data-using-setvalue-setpatch/ para comprender cómo usar formularios reactivos para agregar / editar la función usando setValue. Me salvó el tiempo
fuente
Puede usar form.get para obtener el objeto de control específico y usar setValue
fuente
Como se señaló en los comentarios, esta función no era compatible en el momento en que se hizo esta pregunta. Este problema se ha resuelto en angular 2 rc5
fuente
He implementado una solución temporal hasta el formulario de soporte angular2 updateValue
uso:
nota: el formulario y los datos deben tener la misma estructura y he usado lodash para deepcloning jQuery y otras bibliotecas también pueden hacerlo
fuente
Eso no es cierto. Solo necesitas usarlo correctamente. Si está utilizando las formas reactivas, el NgModel debe utilizarse junto con la directiva reactiva. Vea el ejemplo en la fuente .
Aunque parece de los comentarios TODO , es probable que se elimine y se reemplace con una API reactiva.
fuente
FormControlName
lo agrega explícitamente como un@Input()
. Ver la fuente a la que me vinculé. Si esos selectores de negación no estuvieran allí, entonces con el ejemplo anterior, se crearía un NgModel, que no desea.FormControlDirective
([formControl]
) como paraFormControlName
(formControlName
), así es como funciona. SingModel
se usa sin uno de esos, se asume que usará formularios declarativos yNgModel
se crea un. SingModel
se usa junto con una de las directivas de forma reactiva , entonces esa directiva de forma reactiva manejará el modelo, no unNgModel