"exportAs"设置为"ngForm"没有指令

Nas*_*LEK 193 angular2-forms angular

拥有此项目依赖项:

  "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",
  }
Run Code Online (Sandbox Code Playgroud)

这个登录模板:

<form #loginForm="ngForm" (ng-submit)="authenticate(loginForm.value)">
</form>
Run Code Online (Sandbox Code Playgroud)

而这个登录组件:

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) {
   ... 
  }
}
Run Code Online (Sandbox Code Playgroud)

我有这个错误:

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)">
Run Code Online (Sandbox Code Playgroud)

mic*_*yks 422

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

@NgModule({
  imports: [
             BrowserModule,

             FormsModule      //<----------make sure you have added this.
           ],
  ....
})
Run Code Online (Sandbox Code Playgroud)

  • 它*必须*绑定到<form>元素 (26认同)
  • 我做到了这一点,我仍然得到错误.还有其他想法吗?(我正在发布版本.) (23认同)
  • 在我的模块中添加ReactiveFormsModule解决了我的问题. (8认同)
  • @pop谢谢,将它添加到`div`并导致此错误. (5认同)

Tet*_*Dev 45

您不仅要导入FormsModule根AppModule,还要导入到使用任何角形式指令的每个子模块中.

// SubModule A

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

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


Sha*_*ain 41

我知道这是一个老帖子,但我想分享我的解决方案.我在imports []数组中添加了" ReactiveFormsModule " 来解决此错误

错误:没有将"exportAs"设置为"ngForm"的指令("

固定:

module.ts

从'@ angular/forms' 导入{FormsModule,ReactiveFormsModule }

 imports: [
    BrowserModule,
    FormsModule , 
    ReactiveFormsModule
  ],
Run Code Online (Sandbox Code Playgroud)


Gün*_*uer 14

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

@NgModule({
  imports: [FormsModule],
  ...
})
Run Code Online (Sandbox Code Playgroud)

  • 你有没有想过这个?有相同的错误,我也导入了FormsModule. (13认同)
  • 我做到了这一点,我仍然得到错误.还有其他想法吗?(我正在发布版本.) (4认同)

Wat*_*cle 10

<div #myForm="ngForm"></div>
Run Code Online (Sandbox Code Playgroud)

也会导致错误,可以通过包含ngForm 指令来修复。

<div ngForm #myForm="ngForm"></div>
Run Code Online (Sandbox Code Playgroud)


Nad*_*ine 9

如果名称是这样分配的:

#editForm="testForm"
Run Code Online (Sandbox Code Playgroud)

... exportAs 必须在组件装饰器中定义:

selector: 'test-form',
templateUrl: './test-form.component.html',
styleUrls: ['./test-form.component.scss'],
exportAs: 'testForm'
Run Code Online (Sandbox Code Playgroud)


Mas*_*240 9

另一项检查:

确保您的组件已添加到 app.module.ts 中 @NgModule 的声明数组中

@NgModule({
declarations: [
    YourComponent,
],
Run Code Online (Sandbox Code Playgroud)

运行该ng generate component命令时,它不会自动将其添加到 app.module 中。


sev*_*ven 8

(以防其他人像我一样失明) form FTW!确保使用<form>标签

不会工作:

<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>
Run Code Online (Sandbox Code Playgroud)

像魅力的工作:

 <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>
Run Code Online (Sandbox Code Playgroud)


小智 7

你必须关心三件事:

  1. 如果您使用子模块,则必须FormModule在该子模块中导入:

    imports:[CommonModule, HttpModule, FormsModule]
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您必须FormModule在模块中导出:

    exports:[FormsModule]
    
    Run Code Online (Sandbox Code Playgroud)

    所以在一起看起来像:

    imports:[CommonModule, HttpModule, FormsModule],
    exports:[FormsModule],
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在文件顶部,您必须导入FormsModule

    import {FormsModule} from '@angular/forms';
    
    Run Code Online (Sandbox Code Playgroud)

如果您仅使用app.module.ts则无需导出。只需要导入即可。


Md *_*ker 5

检查是否导入FormsModule.新形式的角度2发布版本中没有ngControl.您必须将模板更改为示例

<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>
Run Code Online (Sandbox Code Playgroud)


Jo *_*aul 5

除了在登录组件 ts 文件中导入表单模块之外,还需要导入 NgForm。

import { NgForm } from '@angular/forms';
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题