Я пытаюсь реализовать Dynamic Forms в Angular 2. Я добавил дополнительные функции, такие как Delete и Cancel, к динамическим формам. Я следил за этой документацией: https://angular.io/docs/ts/latest/cookbook/dynamic-form.html
Я сделал некоторые изменения в коде. Я получаю ошибку здесь.
Как мне сделать эту ошибку?
Вы можете найти полный код здесь: http://plnkr.co/edit/SL949g1hQQrnRUr1XXqt?p=preview , который работает в plunker, но не в моей локальной системе.
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();
}
}
Ответы:
Выяснили быстрое решение, обновите свой код @NgModule следующим образом:
Источник: Невозможно связать с 'ngModel', так как это не известное свойство 'input'
источник
FormsModule
же самое, вNgModule
котором вы объявили свой компонент. Простое высказывание «сделать так, чтобы ваш NgModule выглядел так», не очень хороший ответ.Чтобы ngModel работал при использовании AppModules (NgModule), вы должны импортировать FormsModule в свой AppModule.
Как это:
источник
Я столкнулся с подобной ошибкой после обновления до RC5; то есть Angular 2: Невозможно связать с 'ngModel', так как это не известное свойство 'input'.
Код на 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
Я надеюсь, что это устраняет ошибку, которую вы получаете, и помогает вам двигаться в правильном направлении.
Короче говоря, мне пришлось создать NGModule в app.module.ts:
Затем я изменил main.ts для использования модуля:
Конечно, мне также нужно было обновить зависимости в package.json. Вот мои зависимости от package.json. По общему признанию, я собрал их вместе из других источников (может быть, примеры из ng docs), поэтому ваш пробег может отличаться:
Надеюсь, это поможет лучше. :-)
источник
Вы также должны добавить недостающие.
источник
Вы только что добавили
FormsModule
и импортировалиFormsModule
в вашapp.module.ts
файл.Просто добавьте две вышеупомянутые строки в свой
app.module.ts
. Работает нормально.источник
Вам необходимо импортировать FormsModule в ваш @NgModule Decorator, @NgModule присутствует в вашем файле moduleName.module.ts.
источник
Шаг, чтобы следовать
1. Откройте вашapp.module.ts
файл.,
2. Добавитьimport { FormsModule } from '@angular/forms';
,
3. ДобавитьFormsModule
вimports
качествеimports: [ BrowserModule, FormsModule ],
,
Конечный результат будет выглядеть так
источник
Чтобы иметь возможность использовать
'ngModule'
,'FormsModule'
(из@angular/forms
) должен быть добавлен в вашimport[]
массив вAppModule
(должен быть по умолчанию в проекте CLI).источник
Первый импорт FormsModule из angular lib и под NgModule объявил его в импорте
источник
Вам необходимо импортировать зависимость @ angular / forms в ваш модуль.
если вы используете npm, установите зависимость:
Импортируйте его в свой модуль:
И если вы используете SystemJs для загрузки модулей
Теперь вы можете использовать [(ngModel)] для двух способов привязки данных.
источник
По какой-то причине в Angular 6 простой импорт FormsModule не решил мою проблему. Что, наконец, исправило мою проблему, добавив
источник
Предположим, ваш старый app.module.ts может выглядеть примерно так:
Теперь импортируйте FormsModule в ваш app.module.ts
http://jsconfig.com/solution-cant-bind-ngmodel-since-isnt-known-property-input/
источник
Этот ответ может помочь вам, если вы используете карму:
Я поступил именно так, как указано в ответе @ wmnitin, но ошибка всегда была. Когда вместо «начала кармы» используется «ng serve», оно работает!
источник
Это описано в уроке Angular: https://angular.io/tutorial/toh-pt1#the-missing-formsmodule
Вы должны импортировать
FormsModule
и добавить его к импорту в вашей@NgModule
декларации.источник