在使用TypeScript的Angular2-forms框架时,我一直得到这个错误:

没有将exportAs设置为ngForm的指令

这是我的代码

项目依赖关系:

  "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",
  }

这是登录模板:

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

...和登录组件:

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

我有这个错误:

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

当前回答

如果一个名称是这样分配的:

#editForm="testForm"

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

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

其他回答

是的,我也遇到过同样的问题…我做了所有的事情,但没有工作。 这个解决了我的问题。因为我们在严格模式下使用了angular 'with'。

在app.module.ts中添加以下代码

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

imports: [
    BrowserModule,
    FormsModule, 
    ReactiveFormsModule
],

以及使用NgForm的文件 在.html文件

<form #form="ngForm" (ngSubmit)="loginSubmit(form);">
</form>

在.ts文件中

import { NgForm } from '@angular/forms';
@Component({
  selector: 'app-login-page',
  templateUrl: './login-page.component.html',
  styleUrls: ['./login-page.component.scss']
})
export class LoginPageComponent implements OnInit {
  NgForm=NgForm;//this one solve my problem...initialization and declaration
}

同意@micronyks提供的解决方案,但如果你有一个简单的应用程序,其中没有很多模块,这是正确的。否则,我们需要以类似的方式添加模块,我们使用<form #loginForm="ngForm">元素,并在该模块中添加以下代码,如果你不想将其暴露给所有模块或整个应用程序。

import FormsModule from '@angular/forms';
@NgModule{
imports: [FormsModule],
}

我只是移动路由模块,即说ARoutingModule上面的FormsModule和ReactiveFormsModule和CommonModule之后的导入模块数组。

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

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

在我的例子中,我忘记在app.module的声明数组中添加我的组件。Ts,瞧!这个问题已经解决了。