Angular 2: 'ngFormModel', поскольку он не является известным родным свойством
Моя ошибка:
EXCEPTION: Error: Uncaught (in promise): Template parse errors:
Нельзя привязываться к 'ngFormModel', так как это не известное собственное свойство ("
МОЙ ПРОФАЙЛ
] [ngFormModel] = "form" (ngSubmit) = "onSubmit (form.value)" >
"): a @3: 7
Нет директивы с параметром "exportAs", установленным в "ngForm" ( "stname" ] # firstname = "ngForm" >
"): a @9: 85
Нет директивы с параметром "exportAs", установленным в "ngForm" ("/label > ] # lastname = "ngForm" >
Мой шаблон,
<h3 class = "head">MY PROFILE</h3>
<form [ngFormModel]="form" (ngSubmit)="onSubmit(form.value)">
<div class="row">
<div class="form-group">
<label class="formHeading">firstname</label>
<input type="text" id="facebook" class="form-control" ngControl="firstname" #firstname="ngForm" >
</div>
<div *ngIf ="firstname.touched">
<div *ngIf ="!firstname.valid" class = "alert alert-danger">
<strong>First name is required</strong>
</div>
</div>
<div class="form-group">
<label class="formHeading">lastname</label>
<input type="text" id="facebook" class="form-control col-xs-3" ngControl="lastname" #lastname="ngForm" >
</div>
<div *ngIf ="lastname.touched" >
<div *ngIf = "!lastname.valid" class = "alert alert-danger">
<strong>Last name is required</strong>
</div>
</div>
<div class="form-group">
<label class="formHeading">Profilename</label>
<input type="text" id="facebook" class="form-control col-xs-3" ngControl="profilename" #profilename="ngForm" >
</div>
<div class="form-group">
<label class="formHeading">Phone</label>
<input type="text" id="facebook" class="form-control col-xs-3" ngControl="phone" #phone="ngForm" >
</div>
<div *ngIf ="phone.touched" >
<div *ngIf = "!phone.valid" class = "alert alert-danger">
<strong>Phone number is required</strong>
</div>
</div>
<label class="formHeading">Image</label>
<input type="file" name="fileupload" ngControl="phone">
<div class="form-row btn">
<button type="submit" class="btn btn-primary " [disabled]="!form.valid">Save</button>
</div>
</div>
</form>
Мой компонент, import {Component} из '@ angular/core'; import {Http, Response, Headers} из '@angular/http'; import {Observable} из 'rxjs/Observable'; import {Subject} из 'rxjs/Subject'; import {contentHeaders} из '../headers/headers'; импортировать {FORM_DIRECTIVES} из '@angular/forms'; import {Router, ROUTER_DIRECTIVES} из '@angular/router'; import {Control, FormBuilder, ControlGroup, Validators} из '@angular/common';
@Component({
templateUrl: './components/profile/profile.html',
directives: [ROUTER_DIRECTIVES,FORM_DIRECTIVES],
})
export class Profile {
http: Http;
form: ControlGroup;
constructor(fbld: FormBuilder,http: Http,public router: Router) {
this.http = http;
this.form = fbld .group({
firstname: ['', Validators.required],
lastname: ['', Validators.required],
profilename :['', Validators.required],
image : [''],
phone : [''],
});
}
onSubmit(form:any){
console.log(form);
let body = JSON.stringify(form);
var headers = new Headers();
this.http.post('http://localhost/angular/index.php/profile/addprofile',body,{headers:headers})
.subscribe(
response => {
if(response.json().error_code ==0){
alert('added successfully');
this.router.navigate(['/demo/professional']);
}
else{
alert('fail');
}
})
}
}
Ответы
Ответ 1
Просто импортируйте следующий оператор в ts,
import {FORM_DIRECTIVES, FormBuilder, Validators, REACTIVE_FORM_DIRECTIVES} from '@angular/forms';
directives: [CORE_DIRECTIVES, ROUTER_DIRECTIVES, FORM_DIRECTIVES, REACTIVE_FORM_DIRECTIVES],
Внесите следующие изменения в шаблоны,
<h3 class = "head">MY PROFILE</h3>
<form [ngFormModel]="form" (ngSubmit)="onSubmit(form.value)">
<div class="row">
<div class="form-group">
<label class="formHeading">firstname</label>
<input type="text" id="facebook" class="form-control" [formControl]="form.controls['firstname']">
</div>
<div *ngIf ="firstname.touched">
<div *ngIf ="!firstname.valid" class = "alert alert-danger">
<strong>First name is required</strong>
</div>
</div>
<div class="form-group">
<label class="formHeading">lastname</label>
<input type="text" id="facebook" class="form-control col-xs-3" [formControl]="form.controls['lastname']">
</div>
<div *ngIf ="lastname.touched" >
<div *ngIf = "!lastname.valid" class = "alert alert-danger">
<strong>Last name is required</strong>
</div>
</div>
<div class="form-group">
<label class="formHeading">Profilename</label>
<input type="text" id="facebook" class="form-control col-xs-3" [formControl]="form.controls['profilename']" >
</div>
<div class="form-group">
<label class="formHeading">Phone</label>
<input type="text" id="facebook" class="form-control col-xs-3" [formControl]="form.controls['phone']">
</div>
<div *ngIf ="phone.touched" >
<div *ngIf = "!phone.valid" class = "alert alert-danger">
<strong>Phone number is required</strong>
</div>
</div>
<div class="form-row btn">
<button type="submit" class="btn btn-primary " [disabled]="!form.valid">Save</button>
</div>
Наконец, сделайте это при загрузке,
import {provideForms, disableDeprecatedForms} from '@angular/forms';
bootstrap(MyDemoApp, [
provideForms(),
disableDeprecatedForms()]);
Ответ 2
Проблема заключается в том, что вы все еще импортируете из common
и особенно с использованием инструкций старых форм.
Импортируйте правильно компоненты для новых форм:
import {FORM_DIRECTIVES, REACTIVE_FORM_DIRECTIVES} from '@angular/forms';
import {FormBuilder, FormGroup, Validators} from '@angular/forms';
И исправьте компонент:
@Component({
...
directives: [FORM_DIRECTIVES, REACTIVE_FORM_DIRECTIVES]
})
export class AppComponent {
form: FormGroup;
constructor(fbld: FormBuilder) {
this.form = fbld.group({
...
});
}
...
}
Затем исправьте представление: ngFormModel
был заменен на formGroup
и используйте formControl
для ваших полей:
<form [formGroup]="form" (ngSubmit)="onSubmit(form.value)">
<div class="row">
<div class="form-group">
<label class="formHeading">firstname</label>
<input type="text" id="facebook" class="form-control" [formControl]="form.controls['firstname']" >
</div>
<div *ngIf ="form.controls['firstname'].touched">
<div *ngIf ="!form.controls['firstname'].valid" class = "alert alert-danger">
<strong>First name is required</strong>
</div>
</div>
...
<div class="form-row btn">
<button type="submit" class="btn btn-primary" [disabled]="!form.valid">Save</button>
</div>
</div>
</form>
Изменить. Из Angular 2.0.0-rc.5 необходимо удалить директивы из компонента и импортировать модули формы в AppModule
:
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
@NgModule({
imports: [
...
FormsModule,
ReactiveFormsModule
],
...
bootstrap: [AppComponent]
})
export class AppModule { }
Если вы используете общий модуль, не забудьте их экспортировать:
@NgModule({
imports: [
...
FormsModule,
ReactiveFormsModule
],
exports: [
...
FormsModule,
ReactiveFormsModule
]
})
export class SharedModule { }
Ответ 3
У меня была такая же проблема. Что я сделал для ее решения:
- удалите тег и добавьте (нажмите) -функцию к кнопке
- проверил мой backend: произошла ошибка в каком-то специальном событии... исправлено это
Теперь он больше не срабатывает дважды.
Так что дважды проверьте это! Вы никогда не знаете...