Bom, vamos responder sua pergunta por partes. Primeiro, vamos ao valor '' passado para cada Control
passado para o método group
de FormBuilder
.
É neste valor que podemos passar um valor padrão para o campo que será exibido para o usuário. Contudo, qualquer valor que você passar para ele não será exibido, porque você esta usando a diretiva ngModel
. Quando usamos ngModel
em um formulário, o valor que será buscado é sempre o valor do modelo.
Se quiser fazer um teste, remova o [(ngModel)]
de todos o inputs do seu formulário e depois coloque um valor qualquer lá no FormBuilder onde está as pasta em branco. Assim que seu formulário for carregado, ele exibirá o valor.
É possível lidar com dados do formulário sem utilizar o ngModel, mas quando decidi usar o ngModel foi para tornar o código lá em CadastroComponent
menos verboso e o aluno se sentir em casa, principalmente quando se veio do Angular 1.
Agora, sobre o Validator.compose
. Li e reli a documentação e ela diz que o parâmetro deve ser uma função e não um array.
https://angular.io/docs/ts/latest/api/forms/index/FormBuilder-class.html
Essa função é gerada por Validator.compose
que recebe uma lista de valiadores e o resultado é uma função passada para Validator.compose
. Estou tão perplexo quanto você por ter funcionando sem Validator.compose
o que contradiz a API.
Sendo assim, até entender a razão disso ou saber se é resquício de um código antigo, preço que você faça conforme ensinei porque é assim que esta na documentação. É bem capaz da forma que funcionou passado array diretamente parar de funcionar em uma versão mais atual do Angular.
Eu vou investigando e se eu souber de mais alguma coisa eu atualizo esse post. Mas no geral, consegui lançar uma luz sobre o que ocorreu?