कोणीय 2: 'ngModel' को नहीं बांध सकता क्योंकि यह 'इनपुट' की ज्ञात संपत्ति नहीं है


178

मैं कोणीय 2 में डायनामिक फॉर्म को लागू करने की कोशिश कर रहा हूं। मैंने डायनामिक रूपों में हटाएं और रद्द करें जैसे अतिरिक्त कार्यक्षमताओं को जोड़ा है। मैंने इस दस्तावेज़ का अनुसरण किया है: https://angular.io/docs/ts/latest/cookbook/dynamic-form.html

यहां छवि विवरण दर्ज करें

मैंने कोड में कुछ बदलाव किए हैं। मुझे यहाँ त्रुटि हो रही है।

मैं इस त्रुटि को कैसे करूं?

आप यहां पूर्ण कोड पा सकते हैं: http://plnkr.co/edit/SL949g1hQQrnRUr1XXqt?p=preview , जो प्लंकर में काम कर रहा है, लेकिन मेरे स्थानीय सिस्टम में नहीं।

HTML कोड:

<div>
  <form [formGroup]="form">

    <div *ngFor="let question of questions" class="form-row">
      <label [attr.for]="question.key">{{question.label}}</label>

  <div [ngSwitch]="question.controlType">

    <input *ngSwitchCase="'textbox'" [formControlName]="question.key"
            [id]="question.key" [type]="question.type" [(ngModel)]="question.value">

    <select [id]="question.key" [(ngModel)]="question.value" *ngSwitchCase="'dropdown'" [formControlName]="question.key" >
      <option *ngFor="let opt of question.options" [ngValue]="opt.key" >{{opt.value}}</option>
    </select>

    <input *ngSwitchCase="'checkbox'"  [(ngModel)]="question.value"
            [id]="question.key" [type]="question.type" (change)="question.value = ck.checked" #ck [ngModelOptions]="{standalone: true}">

  </div> 
  <div class="errorMessage" *ngIf="!form.controls[question.key].valid">{{question.label}} is required</div>
    </div>

    <div class="form-row">
      <button type="submit" [disabled]="!form.valid" (click)="onSubmit()">Save</button>
      <button type="button" class="btn btn-default" (click)="cancel()">Cancel</button>
      <button type="button" class="btn btn-default" (click)="clear()">Clear</button>

    </div>
  </form>

  <div *ngIf="payLoad" class="form-row">
    <strong>Saved the following values</strong><br>{{payLoad}}
  </div>
</div>

घटक कोड:

import { Component, Input, OnInit }  from '@angular/core';
import { FormGroup, REACTIVE_FORM_DIRECTIVES } from '@angular/forms';
import { QuestionBase }                 from './question-base';
import { QuestionControlService }       from './question-control.service';
import { ControlGroup }     from '@angular/common';
import {ChangeDetectorRef} from '@angular/core';
import { FormsModule }   from '@angular/forms';

@Component({
  selector: 'dynamic-form',
  templateUrl: 'app/dynamicform/form.component.html',
  directives: [REACTIVE_FORM_DIRECTIVES],
  providers:  [QuestionControlService]
})
export class DynamicFormComponent implements OnInit {

  @Input() questions: QuestionBase<any>[] = [];
  form: FormGroup;
  payLoad:any;
  payLoad2:any;
  questiont: QuestionBase<any>;
  questiond: QuestionBase<any>;
  constructor(private qcs: QuestionControlService, private cdr: ChangeDetectorRef) {  }
  ngOnInit() {
    this.form = this.qcs.toFormGroup(this.questions);
    console.log("Form Init",this.questions);
    this.questiont = JSON.parse(JSON.stringify(this.questions));
    this.questiond = JSON.parse(JSON.stringify(this.questions));
  }
  onSubmit() {
    this.payLoad = JSON.stringify(this.form.value);
    this.payLoad2=this.payLoad;
    this.questiont = JSON.parse(JSON.stringify(this.questions));
    console.log("Submitted data",this.questions);
  }
  cancel(){
    console.log("Canceled");
    this.questions = JSON.parse(JSON.stringify(this.questiont));
  }
  clear(){
    this.questions = JSON.parse(JSON.stringify(this.questiond));
    this.questiont = JSON.parse(JSON.stringify(this.questiond));
    console.log("Cleared");
    this.cdr.detectChanges();
  }
}

मुझे अपग्रेड करने के बाद भी यही त्रुटि है। यहाँ लिखूंगा अगर मुझे पता है तो क्यों।
कार्ल Boisvert

1
ठीक है, मेरे लिए यह तब गायब हो गया जब मैंने अपने NgModule घोषणा में FormsModule का आयात किया। लेकिन मुझे अभी भी यह कहते हुए एक त्रुटि है कि "AppComponent का कोई मार्ग विन्यास नहीं है।" भले ही मैंने मार्गों को आयात किया हो। लेकिन जांचें कि क्या यह आपकी समस्या को ठीक करता है।
कार्ल Boisvert


जवाबों:


282

त्वरित समाधान का पता लगाएं, इस तरह अपना @NgModule कोड अपडेट करें:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';

@NgModule({
imports: [ BrowserModule, FormsModule ],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})

export class AppModule { }

स्रोत: 'ngModel' को नहीं बांध सकते क्योंकि यह 'इनपुट' की ज्ञात संपत्ति नहीं है


15
क्या यह अभी भी सही समाधान है? मेरे लिए सब कुछ इस तरह है और अभी भी मुझे त्रुटि मिल रही है?
फ्रांसेस्कोमुसी

2
हाँ, यह अभी भी काम कर रहा है, आप FormsModule के बजाय ReactiveFormsModule को भी आज़मा सकते हैं। कृपया अपनी त्रुटि पोस्ट करें यदि कोई हो।
wmnitin

1
मुझे क्षमा करें। मेरा मुद्दा कुछ अलग था। मुझे लगा कि यहाँ: stackoverflow.com/questions/39152071/… उत्तर के लिए धन्यवाद!
फ्रांसेस्कोमुसी

29
ऐसा प्रतीत होता है कि वास्तविक उत्तर यह था कि आपको FormsModuleउसी में आयात करने की आवश्यकता है NgModuleजिसे आपने अपने घटक में घोषित किया है। सरल कहावत "अपने NgModule को इस तरह बनाएं" बहुत अच्छा उत्तर नहीं है।
वेबवंडर

यह वास्तव में काम नहीं करता है, यह ReactiveFormsModule होना चाहिए
जूलियस शैडोअस्पेक्ट फ्लिमेल

53

AppModules (NgModule) का उपयोग करते समय ngModel काम करने के लिए, आपको अपने AppModule में FormsModule आयात करना होगा।

ऐशे ही:

import { NgModule } from '@angular/core';
import { BrowserModule  } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';

import { AppComponent }   from './app.component';


@NgModule({
    declarations: [AppComponent],
    imports: [BrowserModule, FormsModule],
    bootstrap: [AppComponent]
})
export class AppModule {}

आप मॉड्यूल में आयात करने के लिए FormsModule को जोड़ने की आवश्यकता है जहां आप अपने निर्देशों का उपयोग कर रहे हैं: उन सभी में सही?
मार्विन ज़ुम्बैडो

12

RC5 में अपग्रेड करने के बाद मुझे एक समान त्रुटि का सामना करना पड़ा; अर्थात कोणीय 2: 'ngModel' को नहीं बांध सकता क्योंकि यह 'इनपुट' की ज्ञात संपत्ति नहीं है।

Plunker पर कोड आपको Angular2 RC4 का उपयोग करके दिखाता है, लेकिन https://angular.io/docs/ts/latest/cookbook/dynamic-form.html पर उदाहरण कोड NGModule का उपयोग कर रहा है जो RC5 का हिस्सा है। NGModules RC4 से RC5 तक एक परिवर्तनशील परिवर्तन है।

यह पृष्ठ RC4 से RC5: https://angular.io/docs/ts/latest/cookbook/rc4-to-rc5.html पर माइग्रेशन की व्याख्या करता है

मुझे आशा है कि यह आपके द्वारा की जा रही त्रुटि को संबोधित करता है और आपको सही दिशा में जाने में मदद करता है।

संक्षेप में, मुझे app.module.ts में एक NGModule बनाना था:

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule }   from '@angular/forms';

import { AppComponent }  from './app.component';

@NgModule({
    imports:      [ BrowserModule, FormsModule ],
    declarations: [ AppComponent ],
    bootstrap:    [ AppComponent ]
})
export class AppModule { }

मैंने तब मॉड्यूल का उपयोग करने के लिए main.ts को बदल दिया:

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';

platformBrowserDynamic().bootstrapModule(AppModule);

बेशक, मुझे package.json में निर्भरता को अपडेट करने की भी आवश्यकता थी। यहाँ package.json से मेरी निर्भरता है। बेशक, मैंने उन्हें अन्य स्रोतों (शायद एनजी डॉक्स उदाहरणों) से एक साथ शौक किया है, इसलिए आपका लाभ भिन्न हो सकता है:

...
"dependencies": {
    "@angular/common": "2.0.0-rc.5",
    "@angular/compiler": "2.0.0-rc.5",
    "@angular/core": "2.0.0-rc.5",
    "@angular/forms": "0.3.0",
    "@angular/http": "2.0.0-rc.5",
    "@angular/platform-browser": "2.0.0-rc.5",
    "@angular/platform-browser-dynamic": "2.0.0-rc.5",
    "@angular/router": "3.0.0-rc.1",
    "@angular/router-deprecated": "2.0.0-rc.2",
    "@angular/upgrade": "2.0.0-rc.5",
    "systemjs": "0.19.27",
    "core-js": "^2.4.0",
    "reflect-metadata": "^0.1.3",
    "rxjs": "5.0.0-beta.6",
    "zone.js": "^0.6.12",
    "angular2-in-memory-web-api": "0.0.15",
    "bootstrap": "^3.3.6"
  },
...

मुझे उम्मीद है कि इससे बेहतर मदद मिलेगी। :-)


1
मैंने विशिष्ट कोड उदाहरणों को शामिल करने के लिए उत्तर संपादित किया।
कटहल 20

10
import {FormControl,FormGroup} from '@angular/forms';

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

आपको लापता लोगों को भी जोड़ना चाहिए।


1
नमस्ते, मेरे मामले में यह एक समाधान है, ऐसा लगता है कि फॉर्म समूह एक महत्वपूर्ण हिस्सा है।
जीन जिमेनेज

8

आपको अपनी फ़ाइल में बस जोड़ना FormsModuleऔर आयात करना FormsModuleहै app.module.ts

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

imports: [
    BrowserModule, FormsModule 
],

बस उपरोक्त दो पंक्तियों को अपने में जोड़ें app.module.ts। यह ठीक काम कर रहा है।


4

आपको अपने @NgModule डेकोरेटर में FormsModule को आयात करने की आवश्यकता है, @NgModule आपके मॉड्यूल में मौजूद है।

import { FormsModule } from '@angular/forms';
@NgModule({
   imports: [
      BrowserModule,
      FormsModule
   ],
   declarations: [ AppComponent ],
   bootstrap: [ AppComponent ]
 })

4

अनुसरण करने के लिए कदम

1. अपने को खोलें app.module.ts फ़ाइल ।

2. जोड़ें import { FormsModule } from '@angular/forms';

3. FormsModule के importsरूप में जोड़ेंimports: [ BrowserModule, FormsModule ],

फाइनल रिजल्ट इस तरह दिखेगा

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

3

उपयोग करने में सक्षम होने के लिए 'ngModule', 'FormsModule'(से @angular/forms) को आपके import[]सरणी में AppModule(एक सीएलआई परियोजना में डिफ़ॉल्ट रूप से होना चाहिए ) में जोड़ा जाना चाहिए।


3

पहले आयात कोणीय लिबास से FormsModule और NgModule के तहत आयात में घोषित किया

import { FormsModule } from '@angular/forms';
    @NgModule({
      declarations: [
        AppComponent,
        ],
      imports: [
        BrowserModule,
        FormsModule
      ],
      providers: [],
      bootstrap: [AppComponent]
    })

2

आपको अपने मॉड्यूल में @ कोणीय / प्रपत्र निर्भरता आयात करने की आवश्यकता है।

यदि आप npm का उपयोग कर रहे हैं, तो निर्भरता स्थापित करें:

npm install @angular/forms --save

इसे अपने मॉड्यूल में आयात करें:

import {FormsModule} from '@angular/forms';
@NgModule({
    imports: [.., FormsModule,..],
    declarations: [......],
    bootstrap: [......]
})

और यदि आप लोडिंग मॉड्यूल के लिए SystemJs का उपयोग कर रहे हैं

'@angular/forms': 'node_modules/@angular/forms/bundles/forms.umd.js',

अब आप दो तरीकों से डेटाबाइंडिंग के लिए [(ngModel)] का उपयोग कर सकते हैं।


1

किसी कारण से कोणीय 6 में केवल फॉर्ममॉडल आयात करने से मेरी समस्या ठीक नहीं हुई। आखिरकार मेरा मुद्दा क्या था, जोड़कर

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

@NgModule({
  imports: [CommonModule],
})

export class MyClass{
}

1

मान लेते हैं, आपका पुराना app.module.ts इस तरह दिखाई दे सकता है:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';

@NgModule({
    imports: [ BrowserModule ],
    declarations: [ AppComponent ],
    bootstrap: [ AppComponent ]
})

export class AppModule { }

अब अपने app.module.ts में FormsModule आयात करें

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';

@NgModule({
    imports: [ BrowserModule, FormsModule ],
    declarations: [ AppComponent ],
    bootstrap: [ AppComponent ]
})

export class AppModule { }

http://jsconfig.com/solution-cant-bind-ngmodel-since-isnt-known-property-input/


0

यदि आप कर्म का उपयोग कर रहे हैं तो यह उत्तर आपकी मदद कर सकता है:

मैंने ठीक वैसा ही किया है जैसा कि @ wmnitin के उत्तर में उल्लिखित है, लेकिन त्रुटि हमेशा थी। जब "कर्म प्रारंभ" के बजाय "एनजी सर्व" का उपयोग करें, तो यह काम करता है "


0

यह कोणीय ट्यूटोरियल पर वर्णित है: https://angular.io/tutorial/toh-pt1#the-missing-formsmule

आपको FormsModuleअपनी @NgModuleघोषणा में आयात करने के लिए इसे आयात और जोड़ना होगा ।

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

@NgModule({
  declarations: [
    AppComponent,
    DynamicConfigComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    FormsModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.