【问题标题】:Getting Error: "Can't bind to 'ngModal' since it isn't a known property of 'input' "出现错误:“无法绑定到‘ngModel’,因为它不是‘输入’的已知属性”
【发布时间】:2019-09-16 13:43:59
【问题描述】:

点击编辑按钮后,表单应该使用 NgModal 加载用户的数据。但我收到一个错误:“无法绑定到 'ngModal',因为它不是 'input' 的已知属性”?如何解决这个错误?

app.compoment.html

<div class="row">
<div id="registration" class="container col-md-6">

  <form  [formGroup]="registrationForm" (ngSubmit)="onSubmit()">

    <mat-horizontal-stepper >
      <mat-step  [stepControl]="personal_details">
        <ng-template matStepLabel>Enter Personal Details</ng-template>
        <div class="jumbotron" formGroupName="personal_details">
          <div formGroupName="name">
            <div class="form-group">
              <label>First Name : </label>
              <input type="text"  formControlName="first_name" class="form-control"  [(ngModal)]="_trainnerservice.currentTrainner.first_name" >
            </div>
            <div class="form-group">
              <label>Last Name : </label>
              <input type="text" formControlName="last_name" class="form-control" [(ngModal)]="_trainnerservice.currentTrainner.last_name" >
            </div>
          </div>    
          <div class="form-group">
            <label>DOB : </label>
            <input type="date" formControlName="dob" class="form-control" >
          </div>
          <div class="form-group">
            <label>About Yourself : </label>
            <textarea formControlName="about_yourself" class="form-control" ></textarea>
          </div>       
          <div class="form-group">
            <label>Language(s) : </label>
            <button type="button" class="btn btn-secondary btn-sm m-2" (click)="addLanguage()">Add Language</button>
            <!-- <input type="text" formControlName="lang" class="form-control" [{ngModal}]=""> -->
            <div formArrayName="languages_known" *ngIf="getLangsform()">
              <div *ngFor="let lang of getLangsform().controls; let i =index;">
                <input type="text" class="form-control" [formControlName]="i"><br>
              </div>
            </div>
          </div>          
          <div class="form-group ">
            <label>Willingly to travel : </label>
            <input type="radio" formControlName="willingly_to_travel" name="willingly_to_travel" value="yes" class="form-control">
            <label>Yes </label>
            <input type="radio" formControlName="willingly_to_travel" name="willingly_to_travel" value="no" class="form-control" >
            <label>No</label>
          </div>
        </div>
        <br/>
        <button type="submit" class="btn btn-primary">Submit</button>
      </mat-step>
    </mat-horizontal-stepper>
  </form>
</div>

<div class="container col-md-6">
  <h4 class="display-5 text-center">Trainners Detailed List</h4>
  <table class="table table-hover">
   <tr *ngFor="let trainner of allTrainner">
        <td><a class="btn text-danger" (click)="OnEdit(trainner)"><i class="fa fa-edit"></i></a></td>
        <td>{{trainner.personal_details.name.first_name}}</td>
        <td>{{trainner.personal_details.name.last_name}}</td>
        <td>{{trainner.personal_details.dob}}</td>
        <td>{{trainner.personal_details.about_yourself}}</td>
        <td>{{trainner.personal_details.willingly_to_travel}}</td>

    </tr> 
  </table>
</div>

app.component.ts

OnEdit(trainner) {
   this._trainnerservice.currentTrainner = Object.assign({}, trainner);
  }

trainner.service.ts

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';

import { Trainner } from '../trainner.model';
import { Observable } from 'rxjs';


const headerOption = {
  headers : new HttpHeaders({'Content-Type': 'application/json'})
};

@Injectable({
  providedIn: 'root'
})

export class TrainnerService {
  _url = 'http://localhost:3000/trainner';

  currentTrainner: Trainner = {
    personal_details: { type: Object,
      name: { type: Object,
          first_name: '',
          last_name: ''
      },
      dob: '',
      about_yourself: '',
      languages_known: [''],
      willingly_to_travel: ''
  },
  technologies: [ Object, {
      type: Object,
          name: '',
          experience: null,
          ratings: null,
          costing: { type: Object,
              freshers: null,
              laterals: null,
              project_specific: null
          },
          work_as_consultant: ''
  }],
  certifications: [Object, {
      title: '',
      Year: null
  }],
};



  constructor( private _http: HttpClient ) { }

  register(registrationFormData) {
    return this._http.post<any>(this._url, registrationFormData);
  }

  getAllTrainner(): Observable<Trainner[]> {
    return this._http.get<Trainner[]>(this._url, headerOption);
  }

  updateUser(trainner: Trainner): Observable<any> {
    return this._http.put(this._url, trainner, headerOption);
  }
}

期望输出:点击事件发生后数据应该加载到表单中

错误:无法绑定到“ngModal”,因为它不是“输入”的已知属性

【问题讨论】:

  • 模型,不是模态的(模态是一个 js/css 弹出框)
  • @Sammaye Thanx 但他们又面临一个问题,点击编辑按钮没有任何反应
  • 你为什么要使用带有响应式表单的 ngModel?使用 ngModel 或响应式表单。
  • @AJT82 可以举个例子说明我哪里做错了吗?
  • 如果你问为什么会出现这个错误,Sammaye 给了你一个答案 :) 但是是的,如前所述,你不需要或不应该将 ngModel 与反应形式一起使用,因为你有然后是两个单独的绑定,这没有任何意义。幸运的是,新版本的 Angular 已弃用/删除,这是一件好事,因为它被滥用了;)

标签: javascript html angular angular-ngmodel


【解决方案1】:

如果您使用的是响应式表单,请从 first_name 和 last_name 中删除 [(ngModel)]

<div class="form-group">
   <label>First Name : </label>
   <input type="text"  formControlName="first_name" class="form-control">
</div>

【讨论】:

    猜你喜欢
    • 2021-09-20
    • 2016-12-17
    • 1970-01-01
    • 2017-09-04
    • 2018-01-31
    • 2016-12-18
    相关资源
    最近更新 更多