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.