J’essaie d’implémenter des formulaires dynamics dans Angular 2. J’ai ajouté des fonctionnalités supplémentaires telles que Supprimer et Annuler aux formulaires dynamics. J’ai suivi cette documentation: https://angular.io/docs/ts/latest/cookbook/dynamic-form.html
J’ai apporté quelques modifications au code. Je reçois une erreur ici.
Comment puis-je faire cette erreur?
Vous pouvez trouver le code complet ici: http://plnkr.co/edit/SL949g1hQQrnRUr1XXqt?p=preview , qui fonctionne dans plunker mais pas dans mon système local.
Code HTML:
Saved the following values
{{payLoad}}
Code du composant:
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[] = []; form: FormGroup; payLoad:any; payLoad2:any; questiont: QuestionBase; questiond: QuestionBase; 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.ssortingngify(this.questions)); this.questiond = JSON.parse(JSON.ssortingngify(this.questions)); } onSubmit() { this.payLoad = JSON.ssortingngify(this.form.value); this.payLoad2=this.payLoad; this.questiont = JSON.parse(JSON.ssortingngify(this.questions)); console.log("Submitted data",this.questions); } cancel(){ console.log("Canceled"); this.questions = JSON.parse(JSON.ssortingngify(this.questiont)); } clear(){ this.questions = JSON.parse(JSON.ssortingngify(this.questiond)); this.questiont = JSON.parse(JSON.ssortingngify(this.questiond)); console.log("Cleared"); this.cdr.detectChanges(); } }
J’ai trouvé cette solution en faisant une recherche sur Google, mettez à jour votre code @NgModule comme ceci:
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 { }
Source: impossible de se lier à ‘ngModel’ car il ne s’agit pas d’une propriété connue de ‘input’
Pour que ngModel fonctionne lorsque vous utilisez AppModules (NgModule), vous devez importer FormsModule dans votre AppModule.
Comme ça:
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 {}
J’ai rencontré une erreur similaire après la mise à niveau vers RC5; c’est-à-dire angular 2: impossible de se lier à ‘ngModel’ car il ne s’agit pas d’une propriété connue de ‘input’.
Le code sur Plunker vous montre Angular2 RC4, mais l’exemple de code sur https://angular.io/docs/ts/latest/cookbook/dynamic-form.html utilise NGModule qui fait partie de RC5. NGModules est un changement de rupture de RC4 à RC5.
Cette page explique la migration de RC4 à RC5: https://angular.io/docs/ts/latest/cookbook/rc4-to-rc5.html
J’espère que cela corrige l’erreur que vous obtenez et vous aidera à aller dans la bonne direction.
En bref, je devais créer un NGModule dans app.module.ts:
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 { }
J’ai ensuite changé de main.ts pour utiliser le module:
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { AppModule } from './app.module'; platformBrowserDynamic().bootstrapModule(AppModule);
Bien sûr, je devais également mettre à jour les dépendances dans package.json. Voici mes dépendances à partir de package.json. Certes, je les ai regroupés à partir d’autres sources (peut-être les exemples de ng docs), de sorte que votre kilométrage peut varier:
... "dependencies": { "@angular/common": "2.0.0-rc.5", "@angular/comstackr": "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" }, ...
J’espère que cela aide mieux. 🙂
import {FormControl,FormGroup} from '@angular/forms'; import {FormsModule,ReactiveFormsModule} from '@angular/forms';
Vous devriez également append les manquants.
Vous venez d’append FormsModule
et importez le FormsModule
dans votre fichier app.module.ts
.
import { FormsModule } from '@angular/forms'; imports: [ BrowserModule, FormsModule ],
Ajoutez simplement les deux lignes ci-dessus dans votre app.module.ts
. Ça marche bien
Vous devez importer FormsModule dans votre @NgModule Decorator, @NgModule est présent dans votre fichier moduleName.module.ts.
import { FormsModule } from '@angular/forms'; @NgModule({ imports: [ BrowserModule, FormsModule ], declarations: [ AppComponent ], bootstrap: [ AppComponent ] })
Étape à suivre
1. Ouvrez votre fichier app.module.ts
.
.
2. Ajoutez import { FormsModule } from '@angular/forms';
.
3. Ajoutez FormsModule
aux imports
tant imports: [ BrowserModule, FormsModule ],
.
Le résultat final ressemblera à ceci
..... import { FormsModule } from '@angular/forms'; ..... @NgModule({ ..... imports: [ BrowserModule, FormsModule ], ..... })
Pour pouvoir utiliser 'ngModule'
, le 'FormsModule'
(à partir de @angular/forms
) doit être ajouté à votre tableau import[]
dans AppModule
(doit être présent par défaut dans un projet CLI).
Vous devez importer la dépendance @ angular / forms sur votre module.
Si vous utilisez npm, installez la dépendance:
npm install @angular/forms --save
Importez-le dans votre module:
import {FormsModule} from '@angular/forms'; @NgModule({ imports: [.., FormsModule,..], declarations: [......], bootstrap: [......] })
Et si vous utilisez SystemJs pour charger des modules
'@angular/forms': 'node_modules/@angular/forms/bundles/forms.umd.js',
Maintenant, vous pouvez utiliser [(ngModel)] pour deux méthodes de liaison.
Importer d’abord FormsModule à partir de la librairie angular et sous NgModule l’a déclaré dans les importations
import { FormsModule } from '@angular/forms'; @NgModule({ declarations: [ AppComponent, ], imports: [ BrowserModule, FormsModule ], providers: [], bootstrap: [AppComponent] })
Cette réponse peut vous aider si vous utilisez Karma:
J’ai fait exactement comme il est mentionné dans la réponse de @ wmnitin, mais l’erreur était toujours là. Lorsque vous utilisez “ng serve” au lieu de “karma start”, cela fonctionne!