使用 ReactiveForms,如何在 HTML angular 中设置值 6
Using ReactiveForms, how to set value in HTML angular 6
我正在尝试为我的 HTML 设置一个值。我如何实现这一目标?我在我的打字稿上使用反应形式,并且已经在我的 HTML 中尝试过 [value]= "coursemodules.course.id"
但它似乎不起作用。当我 console.log()
它时它不会检索它。
component.ts
@Input() coursemodules: any = []
moduleForm = new FormGroup({
class_id: new FormControl(''),
coursemodule_title: new FormControl(''),
coursemodule_course_id: new FormControl('')
});
constructor(private coursemoduleService: CoursemoduleapiService) {}
ngOnInit() {}
saveModuleForm() {
console.log(this.moduleForm.value);
this.coursemoduleService.createCourseModules(
this.moduleForm.get('class_id').value,
this.moduleForm.get('coursemodule_title').value,
this.moduleForm.get('coursemodule_course_id').value).subscribe(
result => console.log(result),
error => console.log(error)
);
}
HTML
<form [formGroup]="moduleForm" (ngSubmit)="saveModuleForm()">
<div class="modal-body m-3">
<div class="form-group">
<label class="form-label">Class ID</label>
<input formControlName="class_id" type="text"
class="form-control"
placeholder="Class ID">
</div>
<div class="form-group">
<label class="form-label">Module Title</label>
<input formControlName="coursemodule_title" type="text"
class="form-control"
placeholder="Module Title">
</div>
<div class="form-group">
<label class="form-label">Course ID</label>
<input formControlName="coursemodule_course_id" type="text"
class="form-control"
[value]="coursemodules.course.id">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-success">Save changes</button>
</div>
</form>
您可以使用 formname.setValue({})
我建议您删除 [value]="coursemodules.course.id"
,因为它不适用于反应式表单。它可能会显示在表单中,但是反应式表单会为表单维护自己的 state/values 并且通过使用 [value]
可以绕过它。如果您希望为表单字段分配初始值,您必须在控制器中而不是在模板中执行此操作。
ngOnInit() {
this.moduleForm.get('coursemodule_course_id').setValue(this.coursemodules.course.id)
}
如果您知道 coursemodules
将在 OnInit
准备就绪,您可以这样做:
ngOnInit() {
this.moduleForm.patchValue({
coursemodule_course_id: this.coursemodules[0].course.id
})
}
或者,钩入 ngOnChanges
ngOnChanges(changes: SimpleChanges): void {
if (changes.coursemodules && changes.coursemodules.currentValue) {
...same as ngOnInit
}
}
做的时候要注意
class_id: new FormControl('')
您正在提供控制值 ''
。你可以做 class_id: new FormControl(6)
等等
不要将 [value]
与 formControlName 一起使用,除非您知道自己在做什么
不要使用 any
类型。创建接口,例如 interface CourseModule
然后:
@Input() coursemodules: CourseModule[] = []
这将在尝试 this.coursemodules.course.id
时正确出错。
我正在尝试为我的 HTML 设置一个值。我如何实现这一目标?我在我的打字稿上使用反应形式,并且已经在我的 HTML 中尝试过 [value]= "coursemodules.course.id"
但它似乎不起作用。当我 console.log()
它时它不会检索它。
component.ts
@Input() coursemodules: any = []
moduleForm = new FormGroup({
class_id: new FormControl(''),
coursemodule_title: new FormControl(''),
coursemodule_course_id: new FormControl('')
});
constructor(private coursemoduleService: CoursemoduleapiService) {}
ngOnInit() {}
saveModuleForm() {
console.log(this.moduleForm.value);
this.coursemoduleService.createCourseModules(
this.moduleForm.get('class_id').value,
this.moduleForm.get('coursemodule_title').value,
this.moduleForm.get('coursemodule_course_id').value).subscribe(
result => console.log(result),
error => console.log(error)
);
}
HTML
<form [formGroup]="moduleForm" (ngSubmit)="saveModuleForm()">
<div class="modal-body m-3">
<div class="form-group">
<label class="form-label">Class ID</label>
<input formControlName="class_id" type="text"
class="form-control"
placeholder="Class ID">
</div>
<div class="form-group">
<label class="form-label">Module Title</label>
<input formControlName="coursemodule_title" type="text"
class="form-control"
placeholder="Module Title">
</div>
<div class="form-group">
<label class="form-label">Course ID</label>
<input formControlName="coursemodule_course_id" type="text"
class="form-control"
[value]="coursemodules.course.id">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-success">Save changes</button>
</div>
</form>
您可以使用 formname.setValue({})
我建议您删除 [value]="coursemodules.course.id"
,因为它不适用于反应式表单。它可能会显示在表单中,但是反应式表单会为表单维护自己的 state/values 并且通过使用 [value]
可以绕过它。如果您希望为表单字段分配初始值,您必须在控制器中而不是在模板中执行此操作。
ngOnInit() {
this.moduleForm.get('coursemodule_course_id').setValue(this.coursemodules.course.id)
}
如果您知道 coursemodules
将在 OnInit
准备就绪,您可以这样做:
ngOnInit() {
this.moduleForm.patchValue({
coursemodule_course_id: this.coursemodules[0].course.id
})
}
或者,钩入 ngOnChanges
ngOnChanges(changes: SimpleChanges): void {
if (changes.coursemodules && changes.coursemodules.currentValue) {
...same as ngOnInit
}
}
做的时候要注意
class_id: new FormControl('')
您正在提供控制值 ''
。你可以做 class_id: new FormControl(6)
等等
不要将 [value]
与 formControlName 一起使用,除非您知道自己在做什么
不要使用 any
类型。创建接口,例如 interface CourseModule
然后:
@Input() coursemodules: CourseModule[] = []
这将在尝试 this.coursemodules.course.id
时正确出错。