Portanto, tenho um formulário complexo para criar uma entidade e também quero usá-lo para edição. Estou usando a nova API de formulários angulares. Estruturei o formulário exatamente como os dados que recupero do banco de dados, portanto, quero definir o valor de todo o formulário para os dados recuperados. Aqui está um exemplo do que eu quero fazer:
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 não funciona com novas APIs de formulários, também não me importo de usar vinculação de dados unilateral no modelo como em
<input formControlName="d" value="[data.d]" />
isso funciona, mas seria uma dor no caso das matrizes
angular
angular2-forms
Amgad Serry
fonte
fonte
Respostas:
Para definir todos os valores de FormGroup, use setValue :
Para definir apenas alguns valores, use patchValue :
Com esta segunda técnica, nem todos os valores precisam ser fornecidos e os campos cujos valores não foram definidos não serão afetados.
fonte
Para definir o valor quando seu controle é FormGroup pode usar este exemplo
fonte
Você pode usar form.get para obter o objeto de controle específico e usar setValue
fonte
Sim, você pode usar setValue para definir o valor para fins de edição / atualização.
Você pode consultar http://musttoknow.com/use-angular-reactive-form-addinsert-update-data-using-setvalue-setpatch/ para compreender como usar formulários reativos para adicionar / editar recurso usando setValue. Economizou meu tempo
fonte
Conforme apontado nos comentários, esse recurso não era compatível no momento em que esta pergunta foi feita. Este problema foi resolvido no angular 2 rc5
fonte
Eu implementei uma solução temporária até o formulário de suporte do angular2 updateValue
uso:
nota: formulário e dados devem ter a mesma estrutura e eu usei lodash para deepcloning jQuery e outras bibliotecas podem fazer o mesmo
fonte
Isso não é verdade. Você só precisa usá-lo corretamente. Se você estiver usando as formas reativas, o NgModel deve ser usado em conjunto com a diretiva reativa. Veja o exemplo na fonte .
Embora pareça com os comentários TODO , isso provavelmente será removido e substituído por uma API reativa.
fonte
FormControlName
adiciona explicitamente como um@Input()
. Veja a fonte à qual vinculei. Se esses seletores de negação não estivessem lá, com o exemplo acima, um NgModel seria criado, o que você não quer.FormControlDirective
([formControl]
) eFormControlName
(formControlName
), é assim que funciona. SengModel
for usado sem um desses, presume-se que você usará formas declarativas eNgModel
será criado um. Se ongModel
for usado junto com uma das diretivas de forma reativa , essa diretiva de forma reativa tratará do modelo, não umNgModel