Errore angolare del framework di TypeScript - "Non esiste alcuna direttiva con exportAs impostato su ngForm"


226

Continuo a ricevere questo errore durante l'utilizzo del framework Angular2-form di TypeScript:

Non esiste un directive"exportAs" impostato su "ngForm"

Ecco il mio codice

dipendenze del progetto:

  "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 questo è il modello di accesso:

<form #loginForm="ngForm" (ng-submit)="authenticate(loginForm.value)">
</form>

... e il componente di accesso:

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) {
   ... 
  }
}

Ho questo errore:

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)">

Risposte:


485
import { FormsModule }   from '@angular/forms';

@NgModule({
  imports: [
             BrowserModule,

             FormsModule      //<----------make sure you have added this.
           ],
  ....
})

32
L'ho fatto e continuo a ricevere l'errore. Altre idee? (Sono sulla versione di rilascio.)
— David Pfeffer,

30
Si deve essere associato a elemento <form>
— pop

6
@pop Grazie, l'ho aggiunto a dive ha causato questo errore.
— Arg0n,

1
Grazie, continuo a dimenticare che questo va nella importsmatrice, e non nella providersmatrice
— TetraDev,

9
il mio problema è stato risolto con l'aggiunta di ReactiveFormsModule nel mio modulo.
— Mohammad Mirzaeyan,

50

Devi importare FormsModulenon solo nel AppModule di root, ma anche in ogni sottomodulo che utilizza le direttive sulle forme angolari.

// SubModule A

import { CommonModule } from '@angular/common';
import { FormsModule }   from '@angular/forms';

@NgModule({
  imports: [
    CommonModule,
    FormsModule      //<----------make sure you have added this.
  ],
  ....
})

1
È possibile aggiungere l'array di esportazione, quindi non sarà necessario aggiungerlo alle importazioni di più sottomoduli
— Samih A

@SamihA Spiegare con esempio che l'array di esportazione va in AppModule o Submodule A?
— TetraDev,

Inoltre, non dimenticare di importare ReactiveFormsModule
— Snedden27,

Ha funzionato per me, ma ho scoperto che l'errore non è stato cancellato fino a quando non ho ucciso npm e rieseguo npm run start.
— Dovev Hefetz,

45

So che questo è un vecchio post, ma vorrei condividere la mia soluzione. Ho aggiunto " ReactiveFormsModule " nell'array imports [] per risolvere questo errore

Errore: non esiste alcuna direttiva con "exportAs" impostato su "ngForm" ("

fix:

module.ts

importare {FormsModule, ReactiveFormsModule } da "@ angular / form"

 imports: [
    BrowserModule,
    FormsModule , 
    ReactiveFormsModule
  ],

14
import { FormsModule }   from '@angular/forms';

@NgModule({
  imports: [FormsModule],
  ...
})

4
L'ho fatto e continuo a ricevere l'errore. Altre idee? (Sono sulla versione di rilascio.)
— David Pfeffer,

16
L'hai mai capito? Ho lo stesso errore e ho importato anche FormsModule.
— Josh,

8

(Nel caso in cui qualcun altro sia cieco come me) form FTW ! Assicurati di usare il <form>tag

non funzionerà:

<div (ngSubmit)="search()" #f="ngForm" class="input-group">
    <span class="input-group-btn">
      <button class="btn btn-secondary" type="submit">Go!</button>
    </span>
    <input type="text" ngModel class="form-control" name="search" placeholder="Search..." aria-label="Search...">
</div>

funziona come un incantesimo:

 <form (ngSubmit)="search()" #f="ngForm" class="input-group">
            <span class="input-group-btn">
              <button class="btn btn-secondary" type="submit">Go!</button>
            </span>
            <input type="text" ngModel class="form-control" name="search" placeholder="Search..." aria-label="Search...">
</form>

6

Nel caso in cui un nome venga assegnato in questo modo:

#editForm="testForm"

... exportAs deve essere definito nel decoratore dei componenti:

selector: 'test-form',
templateUrl: './test-form.component.html',
styleUrls: ['./test-form.component.scss'],
exportAs: 'testForm'

questo ha funzionato per me, quando la soluzione accettata no.
— ir0h

confermando che questo è qualcosa che deve essere fatto oltre alla soluzione accettata
— hello_earth

5

controlla se importi FormsModule. Non c'è ngControl nelle nuove versioni angular 2 versione di rilascio. devi cambiare il tuo modello come esempio

<div class="row">
    <div class="form-group col-sm-7 col-md-5">
        <label for="name">Name</label>
        <input type="text" class="form-control" required
               [(ngModel)]="user.name"
               name="name" #name="ngModel">
        <div [hidden]="name.valid || name.pristine" class="alert alert-danger">
            Name is required
        </div>
    </div>
</div>

3

Due cose che devi preoccuparti ..

  1. Se si utilizza il sottomodulo, è necessario importare il FormModule in quel sottomodulo.

            **imports:[CommonModule,HttpModule,FormsModule]**
  2. devi esportare il FormModule nel modulo

        **exports:[FormsModule],**

    così insieme sembra importare: [CommonModule, HttpModule, FormsModule], export: [FormsModule],

  3. in cima devi importare il Modulo

    importare {FormsModule} da '@ angular / form';


se stai usando solo app.module.ts allora

non è necessario esportare .. è necessaria solo l'importazione


1
Se si utilizza FormsModule all'interno del proprio modulo, è necessario quanto segue in xxxx.modules.ts. Moduli di importazione da angolare: import { FormsModule } from '@angular/forms'; aggiungilo alla matrice di importazione NgModule: @NgModule({ imports: [ FormsModule ],
— Koen van der Linden,

2

Ho affrontato questo problema, ma nessuna delle risposte qui ha funzionato per me. Ho cercato su Google e l'ho trovatoFormsModule not shared with Feature Modules

Quindi, se il modulo si trova in un modulo in primo piano, è necessario importare e aggiungere FromsModulelì.

Rif: https://github.com/angular/angular/issues/11365


2

Oltre a importare il modulo modulo nel file ts del componente login è necessario importare anche NgForm.

import { NgForm } from '@angular/forms';

Questo ha risolto il mio problema


Ho ricevuto questo errore: Errore non rilevato: Direttiva imprevista 'NgForm' importata dal modulo
— Steffi Keran Rani J

1
import { FormsModule,ReactiveFormsModule }from'@angular/forms';

imports:[
    BrowserModule.withServerTransition({ appId: 'ng-cli-universal' }),
    HttpClientModule,
    FormsModule,
    ReactiveFormsModule/*This one in particular*/,...
],

in app.module.ts per risolvere in modo permanente errori come "cannot bind [formGroup] or no directive with export as".



1

Sono arrivato a questa stessa domanda più e più volte, anche per lo stesso motivo. Quindi lasciami rispondere dicendo ciò che stavo facendo. Potrebbe essere utile per qualcuno.

Stavo creando un componente tramite angular-clicomando

di componenti gc / qualcosa / qualcosa

Quello che ha fatto, è stato creato il componente come volevo.

Inoltre, durante la creazione del componente, ha aggiunto il componente nell'array delle dichiarazioni del modulo app .

In tal caso, rimuoverlo. E voilà! Potrebbe funzionare


0

È necessario importare il modulo Forms e inserirlo nella sezione delle importazioni.

import { FormsModule } from '@angular/forms';

0

Semplice se non hai importato il modulo, importa e dichiara import {FormsModule} da '@ angular / form';

e se lo hai fatto, devi solo rimuovere formControlName = 'qualunque' ' dai campi di input.


0

Dovresti terminare l'app con ctrl + c ed eseguirla nuovamente con ng serve, se non hai incluso FormsModule nel tuo array di importazioni di file app.module e poi l'hai aggiunta in un secondo momento, angolare non la conosce, non esegue nuovamente la scansione dei moduli , dovresti riavviare l'app in modo che angolare possa vedere che è incluso un nuovo modulo, dopo di che includerà tutte le funzionalità dell'approccio del modello di unità



0

Ho appena spostato i moduli di routing, ad esempio dire ARoutingModule sopra FormsModule e ReactiveFormsModule e dopo CommonModule nelle importazioni di array di moduli.


0

Importa semplicemente il modulo corretto,

"FormsModule"

import { FormsModule } from "@angular/forms";
@NgModule({
  imports: [
    BrowserModule,
    FormsModule //<---.
  ],
  ....
})

0

Questo errore si verifica anche se si sta tentando di scrivere un caso di test unitario in angolare usando il gelsomino.

Il concetto di base di questo errore è import FormsModule. Pertanto, nel file per i test unitari, aggiungiamo la sezione Import e inseriamo FormsModule in quel file

    TestBed.configureTestingModule
    For eg: 
    TestBed.configureTestingModule({
        declarations: [ XYZComponent ],
        **imports: [FormsModule]**,
    }).compileComponents();

-3

Ho avuto lo stesso problema e l'ho risolto aggiornando tutte le dipendenze (package.json) con il seguente comando npm update -D && npm update -S

Come ha sottolineato @ Günter Zöchbauer, assicurati di includere prima il FormsModule.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.