Saya mencoba menerapkan Formulir Dinamis dalam Angular 2. Saya telah menambahkan fungsionalitas tambahan seperti Hapus dan Batalkan ke formulir dinamis. Saya telah mengikuti dokumentasi ini: https://angular.io/docs/ts/latest/cookbook/dynamic-form.html
Saya telah membuat beberapa perubahan pada kode. Saya mendapatkan kesalahan di sini.
Bagaimana cara saya membuat kesalahan ini?
Anda dapat menemukan kode lengkap di sini: http://plnkr.co/edit/SL949g1hQQrnRUr1XXqt?p=preview , yang bekerja di plunker tetapi tidak di sistem lokal saya.
Kode 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>
Kode komponen:
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();
}
}
Jawaban:
Mencari solusi cepat, perbarui kode @NgModule Anda seperti ini:
Sumber: Tidak dapat mengikat 'ngModel' karena ini bukan properti 'input' yang dikenal
sumber
FormsModule
yang sama denganNgModule
yang telah Anda deklarasikan. Kata sederhana "buat NgModule Anda terlihat seperti ini" bukanlah jawaban yang sangat bagus.Agar ngModel berfungsi ketika menggunakan AppModules (NgModule), Anda harus mengimpor FormsModule di AppModule Anda.
Seperti ini:
sumber
Saya mengalami kesalahan serupa setelah memutakhirkan ke RC5; yaitu Angular 2: Tidak dapat mengikat 'ngModel' karena ini bukan properti 'input' yang dikenal.
Kode pada Plunker menunjukkan Anda menggunakan Angular2 RC4, tetapi kode contoh di https://angular.io/docs/ts/latest/cookbook/dynamic-form.html menggunakan NGModule yang merupakan bagian dari RC5. NGModules adalah perubahan besar dari RC4 ke RC5.
Halaman ini menjelaskan migrasi dari RC4 ke RC5: https://angular.io/docs/ts/latest/cookbook/rc4-to-rc5.html
Saya harap ini mengatasi kesalahan yang Anda dapatkan dan membantu Anda pergi ke arah yang benar.
Singkatnya, saya harus membuat NGModule di app.module.ts:
Saya kemudian mengubah main.ts untuk menggunakan modul:
Tentu saja, saya juga perlu memperbarui dependensi di package.json. Inilah dependensi saya dari package.json. Memang, saya sudah tertatih-tatih bersama-sama dari sumber lain (mungkin contoh dokumen), sehingga jarak tempuh Anda dapat bervariasi:
Saya harap ini membantu lebih baik. :-)
sumber
Anda juga harus menambahkan yang hilang.
sumber
Anda baru saja menambahkan
FormsModule
dan mengimpor fileFormsModule
Andaapp.module.ts
.Cukup tambahkan dua baris di atas di
app.module.ts
. Ini bekerja dengan baik.sumber
Anda perlu mengimpor FormsModule di @NgModule Dekorator Anda, @NgModule ada di file moduleName.module.ts Anda.
sumber
Langkah untuk diikuti
1. Bukaapp.module.ts
file ..
2. Tambahimport { FormsModule } from '@angular/forms';
.
3. TambahkanFormsModule
keimports
sebagaiimports: [ BrowserModule, FormsModule ],
.
Hasil akhir akan terlihat seperti ini
sumber
Untuk dapat menggunakan
'ngModule'
,'FormsModule'
(dari@angular/forms
) perlu ditambahkan keimport[]
array Anda diAppModule
(harus ada di sana secara default dalam proyek CLI).sumber
Impor FormsModule pertama dari sudut lib dan di bawah NgModule menyatakannya dalam impor
sumber
Anda perlu mengimpor @ angular / dependensi formulir ke modul Anda.
jika Anda menggunakan npm, instal dependensi:
Impor ke modul Anda:
Dan jika Anda menggunakan SystemJs untuk memuat modul
Sekarang Anda dapat menggunakan [(ngModel)] untuk dua cara penyatuan data.
sumber
Untuk beberapa alasan di Angular 6 hanya mengimpor FormsModule tidak memperbaiki masalah saya. Yang akhirnya memperbaiki masalah saya adalah dengan menambahkan
sumber
Mari kita asumsikan, app.module.ts lama Anda mungkin terlihat mirip dengan ini:
Sekarang impor FormsModule di app.module.ts Anda
http://jsconfig.com/solution-cant-bind-ngmodel-since-isnt-known-property-input/
sumber
Jawaban ini dapat membantu Anda jika Anda menggunakan Karma:
Saya telah melakukan persis seperti yang disebutkan dalam jawaban @ wmnitin, tetapi kesalahan selalu ada. Saat menggunakan "ng serve" dan bukannya "karma start", ia berfungsi!
sumber
Ini dijelaskan pada tutorial Angular: https://angular.io/tutorial/toh-pt1#the-missing-formsmodule
Anda harus mengimpor
FormsModule
dan menambahkannya ke impor dalam@NgModule
deklarasi Anda .sumber