【问题标题】:Angular 2 error- There is no directive with "exportAs" set to "ngModel" with RC4 versionAngular 2 错误 - RC4 版本没有将“exportAs”设置为“ngModel”的指令
【发布时间】:2017-07-13 04:54:06
【问题描述】:

我在我的应用程序中使用了 angular 2 表单,并且我已经根据给定的链接创建了表单。

https://angular.io/docs/ts/latest/guide/forms.html

为了验证和使用表单 API,我设置了 ngModel 值,例如 #name="id" #id="ngModel",这会引发脚本错误。但如果我将#id="ngModel" 设置为#id="ngForm",它就解决了。但就我而言,我必须将我的模型值设置为ngModel。

下面是我的html页面。

 <form (ngSubmit)="onSubmit()" #myForm="ngForm">
  <div class="form-group">
  <label class="control-label" for="id">Employee ID</label>
    <input type="text" class="form-control" required [(ngModel)]="model.id" #name="id"  #id="ngModel" >
    <div [hidden]="id.valid || id.pristine" class="alert alert-danger">
      Employee ID is required
    </div>
  </div>
  <div class="form-group">
    <label for="name">Employee Name</label>
    <input type="text" class="form-control" [(ngModel)]="model.name" name="name" #name="ngModel" required>
        <div [hidden]="name.valid || name.pristine" class="alert alert-danger">
      Employee ID is required
        </div>
  </div>
  <div class="form-group">
    <label for="DOJ">DOJ</label>
    <input class="form-control" required [(ngModel)]="model.DOJ" name="DOJ" #DOJ="ngModel"  />
    <div [hidden]="DOJ.valid || DOJ.pristine" class="alert alert-danger">
      DOJ is required
    </div>
  </div>
  <button type="submit" class="btn btn-default" [disabled]="!myForm.form.valid">Submit</button>
</form>

下面是我的问题。

      EXCEPTION: Template parse errors:
       There is no directive with "exportAs" set to "ngModel" ("
         <div>
          <h1>My Form</h1>
             <form (ngSubmit)="onSubmit()" [ERROR ->]#myForm="ngModel">
             <div class="form-group>
            <label class="control-label" for="id">Employee"):AppComponent@3:34

我检查了更多问题和答案,其中大多数人说将 angular2 版本更新为RC4,所以我已将我的应用程序更新为 rc4,但我仍然面临这个问题。

下面是我的 ts 文件:

import {Component} from '@angular/core';
import { disableDeprecatedForms, provideForms , NgForm} from '@angular/forms';
import {CORE_DIRECTIVES, FORM_DIRECTIVES, FormBuilder,Validators,Control,ControlGroup } from '@angular/common';


@Component({
selector: 'ej-app',    
templateUrl: 'app/app.component.html',
directives: [ CORE_DIRECTIVES,FORM_DIRECTIVES]  
})
  export class AppComponent {
  model = new Employees(null,'','');
    onSubmit() { alert("values submitted")}
   constructor() {
     }
     }
        export class Employees {
         constructor( public id: number,public name: string, public DOJ: String ) {  }
}

【问题讨论】:

  • 您是否启用了disableDeprecatedForms(), provideForms() 的新表单并确保不从@angular/common 导入表单内容?
  • 我已经编辑了我的问题并添加了 ts 文件。请您检查一下。在此我已导入 disableDeprecatedForms,provideForms

标签: javascript typescript angular angular2-template angular2-forms


【解决方案1】:

不要导入FORM_DIRECTIVES 和CORE_DIRECTIVES,因为它们已被弃用,而是确保导入NgForm。您可以使用以下内容:

import {FormGroup, FormBuilder, FormControl, Validators, NgForm } from '@angular/forms';

【讨论】:

    【解决方案2】:

    不要混用新旧表单模块。

    import {CORE_DIRECTIVES, FORM_DIRECTIVES, FormBuilder,Validators,Control,ControlGroup } from '@angular/common';
    

    从@angular/common 导入表单内容。如果你使用新的表格

    bootstrap(AppComponent, [disableDeprecatedForms(), provideForms()])
    

    然后改用

    import {FORM_DIRECTIVES, FormBuilder,Validators,Control,ControlGroup } from '@angular/forms';
    

    【讨论】:

    • 我已经改变如下 'import { disableDeprecatedForms, provideForms , NgForm} from '@angular/forms';从“@angular/common”导入 {CORE_DIRECTIVES};导入 {FORM_DIRECTIVES, FormBuilder,Validators,Control,ControlGroup } from '@angular/forms';'但现在我是新脚本错误
    • 脚本错误:异常:app/app.component.html:7:13 platform-b​​rowser.umd.js:1900 中的错误 异常:app/app.component.html:7:13BrowserDomAdapter 中的错误.logError @ platform-b​​rowser.umd.js:1900 platform-b​​rowser.umd.js:1900 原始异常:TypeError:无法读取 undefinedBrowserDomAdapter.logError @ platform-b​​rowser.umd.js:1900 平台浏览器的属性“有效”。 umd.js:1900 ORIGINAL STACKTRACE:BrowserDomAdapter.logError @ platform-b​​rowser.umd.js:1900 platform-b​​rowser.umd.js:1900 TypeError: 无法读取 DebugAppView._View_AppCompo 中未定义的属性“有效”
    • #name="id" 应该是name="id"
    • 很难说。你能在 Plunker 中重现吗?
    • plnkr.co/edit/mwiQ2K0u3IgsbGHFFWvn?p=preview。我在 index.html 中修复了&lt;my-app&gt; 的标签,将id.valid 和id.pristine 更改为empid.valid 和empid.pristine,并在templateUrl 的templateUrl 之后添加了一个,。
    猜你喜欢
    • 2017-10-21
    • 2017-11-08
    • 2018-08-14
    • 2017-10-02
    • 2018-08-30
    • 2018-11-20
    • 2018-09-02
    • 2020-05-27
    相关资源
    最近更新 更多