Eu continuo recebendo esse erro ao usar a estrutura Angular2-forms do TypeScript:
Não existe
directive
"exportAs" definido como "ngForm"
Aqui está o meu código
dependências do projeto:
"dependencies": {
"@angular/common": "2.0.0-rc.6",
"@angular/compiler": "2.0.0-rc.6",
"@angular/core": "2.0.0-rc.6",
"@angular/forms": "2.0.0-rc.6",
"@angular/http": "2.0.0-rc.6",
"@angular/platform-browser": "2.0.0-rc.6",
"@angular/platform-browser-dynamic": "2.0.0-rc.6",
"@angular/router": "3.0.0-rc.2",
"ng2-bootstrap": "^1.1.1",
"reflect-metadata": "^0.1.8",
"core-js": "^2.4.0",
"es6-module-loader": "^0.17.8",
"rxjs": "5.0.0-beta.11",
"systemjs": "0.19.27",
"zone.js": "0.6.17",
"jquery": "3.0.0",
}
E este é o modelo de login:
<form #loginForm="ngForm" (ng-submit)="authenticate(loginForm.value)">
</form>
... e o componente de logon:
import { Component } from '@angular/core';
import {Http, Headers} from '@angular/http';
@Component({
moduleId: module.id,
selector: 'login-cmp',
templateUrl: 'login.component.html'
})
export class LoginComponent {
constructor($http: Http) {
this.$http = $http;
}
authenticate(data) {
...
}
}
Eu tenho este erro:
zone.js?1474211973422:484 Unhandled Promise rejection: Template parse errors:
There is no directive with "exportAs" set to "ngForm" ("
<form [ERROR ->]#loginForm="ngForm"
(ngsubmit)="authenticate(loginForm.value)">
angular
typescript
forms
angular2-forms
Nassim MOUALEK
fonte
fonte
div
e causou este erro.imports
matriz, e não aproviders
variedadeÉ necessário importar
FormsModule
não apenas o AppModule raiz, mas também todo subModule que use as diretivas de formas angulares.fonte
Sei que este é um post antigo, mas gostaria de compartilhar minha solução. Eu adicionei " ReactiveFormsModule " na matriz imports [] para resolver esse erro
Erro: Não há nenhuma diretiva com "exportAs" definida como "ngForm" ("
Consertar:
module.ts
importar {FormsModule, ReactiveFormsModule } de '@ angular / forms'
fonte
fonte
(Apenas no caso de alguém ser cego como eu)
form
FTW ! Certifique-se de usar a<form>
tagnão vai funcionar:
funciona como charme:
fonte
Caso um nome seja atribuído assim:
... o exportAs deve ser definido no decorador de componentes:
fonte
verifique se você importa o FormsModule. Não há ngControl na nova versão angular 2 do forms. você tem que mudar seu modelo para como um exemplo
fonte
Duas coisas que você precisa cuidar ..
Se você estiver usando o submódulo, precisará importar o FormModule nesse submódulo.
você precisa exportar o FormModule no módulo
então, juntos, parecem importações: [CommonModule, HttpModule, FormsModule], exportações: [FormsModule],
no topo você tem que importar o FormsModule
import {FormsModule} de '@ angular / forms';
se você estiver usando apenas o app.module.ts,
não é necessário exportar .. somente importação necessária
fonte
import { FormsModule } from '@angular/forms';
adicione-o à matriz de importações NgModule:@NgModule({ imports: [ FormsModule ],
Eu enfrentei esse problema, mas nenhuma das respostas aqui funcionou para mim. Eu pesquisei e descobri que
FormsModule not shared with Feature Modules
Portanto, se o seu formulário estiver em um módulo em destaque, você precisará importar e adicionar o
FromsModule
lá.Por favor, ref: https://github.com/angular/angular/issues/11365
fonte
Além de importar o módulo de formulário no arquivo ts do componente de login, você também precisa importar o NgForm.
Isso resolveu meu problema
fonte
no app.module.ts para resolver permanentemente erros como
"cannot bind [formGroup] or no directive with export as"
.fonte
este
Também causa o erro e pode ser corrigido incluindo a diretiva ngForm .
fonte
Eu vim para esta mesma pergunta repetidamente, também devido ao mesmo motivo. Então deixe-me responder dizendo o que estava errado. Pode ser útil para alguém.
Eu estava criando componente via
angular-cli
por comandoO que ele fez, foi criado o componente como eu queria.
Além disso, ao criar o componente, ele foi adicionado à matriz de declarações do App Module .
Se for esse o caso, remova-o. E Voila! Pode funcionar.
fonte
Você deve importar o FormsModule e, em seguida, colocá-lo na seção de importações.
fonte
Simples se você não tiver importado o módulo, importe e declare import {FormsModule} de '@ angular / forms';
e se você fez isso, basta remover formControlName = 'qualquer coisa' dos campos de entrada.
fonte
Você deve encerrar o aplicativo com ctrl + ce executá-lo com ng serve, se você não incluiu o FormsModule na matriz de importação de arquivo app.module e o adicionou posteriormente, angular não sabe, não faz a varredura novamente dos módulos , reinicie o aplicativo para que o angular possa ver que o novo módulo está incluído, depois do que ele incluirá todos os recursos da abordagem da unidade de modelo
fonte
No meu caso, tive que remover o
ngNoForm
atributo da minha<form>
tag.Referência: https://www.techiediaries.com/angular-ngform-ngnoform-template-reference-variable/
fonte
Acabei de mover os módulos de roteamento, ou seja, dizer ARoutingModule acima de FormsModule e ReactiveFormsModule e depois de CommonModule na importação de matriz de módulos.
fonte
Basta importar o módulo correto,
"FormsModule"
fonte
Este erro também ocorre se você estiver tentando escrever um caso de teste de unidade em angular usando jasmim.
O conceito básico deste erro é para
import FormsModule
. Assim, no arquivo para testes de unidade, adicionamos Seção de importações e colocamos FormsModule nesse arquivo emfonte
Eu tive o mesmo problema e o resolvi atualizando todas as dependências (package.json) com o seguinte comando
npm update -D && npm update -S
Como apontou @ Günter Zöchbauer, inclua o FormsModule primeiro.
fonte