Aqui está meu componente no Angular 4:
@Component( {
selector: 'input-extra-field',
template: `
<div class="form-group" [formGroup]="formGroup" >
<switch [attr.title]="field.etiquette"
[attr.value]="field.valeur" [(ngModel)]="field.valeur"
[formControl]="fieldControl" [attr.id]="name" [attr.disabled]="disabled">
</switch>
<error-messages [control]="name"></error-messages>
</div>
`
} )
Aqui está minha aula:
export class SwitchExtraField extends ExtraField {
@Input() field: ExtraFormField;
@Input() entity: { fields: Object };
@Input() formGroup: FormGroup;
constructor( formDir: NgForm ) {
super( null, null, formDir );
}
get disabled(): string {
if ( this.field && !!this.field.saisissable && !this.field.saisissable ) {
return 'disabled';
}
return null;
}
}
Este é o erro que recebo ao compilar:
ERROR Error: No value accessor for form control with unspecified name attribute
at _throwError (forms.es5.js:1918)
at setUpControl (forms.es5.js:1828)
at FormControlDirective.webpackJsonp.../../../forms/@angular/forms.es5.js.FormControlDirective.ngOnChanges (forms.es5.js:4617)
Quando eu mudo o elemento switch para input ele funciona, sabendo que estou usando a mesma estrutura para outros componentes e funciona bem.
angular
form-control
Processar
fonte
fonte
ControlValueAccessor
- Nunca mais se confunda ao implementar ControlValueAccessor em formas angularesRespostas:
Corrigi esse erro adicionando os
name="fieldName" ngDefaultControl
atributos ao elemento que carrega o[(ngModel)]
atributo.fonte
ngDefaultControl
, por exemplo?name="fieldname"
não é necessário, masngDefaultControl
resolve o problema.Eu tive o mesmo problema e o problema era que meu componente filho tinha um
@input
nomeformControl
.Então, eu só precisava mudar de:
para:
ts:
fonte
Também recebi este erro ao escrever um componente de controle de formulário personalizado no Angular 7. No entanto, nenhuma das respostas se aplica ao Angular 7.
No meu caso, o seguinte precisava ser adicionado ao
@Component
decorador:Este é um caso de "Não sei por que funciona, mas funciona." Atribui a má concepção / implementação por parte da Angular.
fonte
Eu também tive o mesmo erro, angular 7
Acabei de adicionar ngDefaultControl
fonte
Eu tive este mesmo erro - acidentalmente vinculei [(ngModel)] ao meu em
mat-form-field
vez doinput
elemento.fonte
Eu estava recebendo essa mensagem de erro em meus testes de unidade com Jasmine. Eu adicionei o atributo ngDefaultControl ao elemento personalizado (no meu caso, era um botão deslizante angular de material) e isso resolve o erro.
Altere o elemento acima para incluir o atributo ngDefaultControl
fonte
Eu estava enfrentando este erro ao executar casos de teste de unidade Karma. Adicionar MatSelectModule nas importações corrige o problema
fonte
Isso é meio estúpido, mas recebi essa mensagem de erro usando acidentalmente em
[formControl]
vez de[formGroup]
. Veja aqui:ERRADO
@Component({ selector: 'app-application-purpose', template: ` <div [formControl]="formGroup"> <!-- '[formControl]' IS THE WRONG ATTRIBUTE --> <input formControlName="formGroupProperty" /> </div> ` }) export class MyComponent implements OnInit { formGroup: FormGroup constructor( private formBuilder: FormBuilder ) { } ngOnInit() { this.formGroup = this.formBuilder.group({ formGroupProperty: '' }) } }
DIREITO
@Component({ selector: 'app-application-purpose', template: ` <div [formGroup]="formGroup"> <!-- '[formGroup]' IS THE RIGHT ATTRIBUTE --> <input formControlName="formGroupProperty" /> </div> ` }) export class MyComponent implements OnInit { formGroup: FormGroup constructor( private formBuilder: FormBuilder ) { } ngOnInit() { this.formGroup = this.formBuilder.group({ formGroupProperty: '' }) } }
fonte
No meu caso, inseri [(ngModel)] no rótulo em vez de na entrada. Também há uma ressalva, tentei executar corretamente o erro acima na linha especificada, mas o erro não foi. Se houver outros lugares onde você cometeu o mesmo erro, ele ainda lançará o mesmo erro na mesma linha
fonte
No meu caso usei diretiva, mas não importei no meu arquivo module.ts. O Import corrigiu isso.
fonte
ng serve
para atualizar a importaçãoEu tive esse mesmo erro, eu tinha um campo de entrada chamado
control
em meu componente de formulário personalizado, mas estava passando o controle acidentalmente na entrada chamadaformControl
. Espero que ninguém enfrente esse problema.fonte
No meu caso foi tão idiota quanto registrar o novo componente para DI nas minhas
app.module.ts
declarações mas não nas exportações.fonte
No meu caso, está acontecendo no meu módulo compartilhado e tive que adicionar o seguinte em @NgModule:
fonte
Também recebi esse erro quando nomeei uma das entradas do meu componente como 'formControl'. Provavelmente está reservado para outra coisa. Se você deseja passar o objeto FormControl entre componentes, use-o assim:
Assim não:
Estranho - mas funcionando :)
fonte
Tive o mesmo erro, mas no meu caso aparentemente foi um problema de sincronização, no momento de renderizar os componentes html.
Segui algumas das soluções propostas nesta página, mas qualquer uma delas funcionou para mim, pelo menos não completamente.
O que realmente resolveu meu erro foi escrever o trecho de código abaixo dentro da tag html pai dos elementos.
Eu estava vinculado à variável.
Código:
O erro foi causado, aparentemente pelo projeto tentando renderizar a página, aparentemente no momento de avaliar a variável, o projeto simplesmente não conseguiu encontrar o seu valor. Com o trecho de código acima, você se certifica de que, antes de renderizar a página, pergunte se a variável foi inicializada.
Este é meu código component.ts:
Aqui está minha marcação html:
Espero que isso possa ser útil.
fonte
Você já tentou mover seu
[(ngModel)]
para o emdiv
vez deswitch
no seu HTML? O mesmo erro apareceu no meu código porque vinculei o modelo a a em<mat-option>
vez de a<mat-select>
. Embora eu não esteja usando o controle de formulário.fonte
No meu caso, era um componente.membro que não existia, por exemplo
Adicioná-lo à declaração da classe corrigiu-o
fonte
No meu caso, o erro foi desencadeado pela duplicação de uma importação de um componente no módulo.
fonte
#Fundo
No meu caso, o erro foi disparado pela alteração da tag do elemento de para por falha. Dentro de <TextView an [(ngModel)] = "nome". foi definido.
Depois de remover [(ngModel)] = o erro "nome" desapareceu.
fonte
Eu estava enfrentando esse problema durante a execução de testes de unidade. Para corrigir, adicionei o MatSlideToggleModule às importações em meu arquivo spect.ts.
fonte
no meu caso, eu tinha uma
<TEXTAREA>
tag do antigo html durante a conversão para angular. Tive que mudar para<textarea>
.fonte
Este erro também ocorre se você tentar adicionar ngModel aos elementos que não são de entrada, como opções suspensas ou de botão de rádio. No meu caso, adicionei um ngModel à opção ion-select em vez de ion-select.
fonte