尝试创建模板驱动表单时出错
Error when I tried to create a template driven form
我想创建一个寺庙驱动的表格,我想从表格中访问值,但是我收到了这个错误:
CreateNewTaskComponent.html:8 ERROR TypeError: Cannot read property 'id' of undefined
这是我的表格:
<form #taskForm="ngForm" (ngSubmit)="addANewTask(taskForm.value)">
<div class="form-group">
<label for="id">Task Id:</label>
<input [(ngModel)]="task.id" type="text" class="form-control" name="id" id="id" placeholder="">
</div>
<div class="form-group">
<label for="description">Description</label>
<input [(ngModel)]="task.description" type="text" class="form-control" name="description" id="description" placeholder="">
</div>
<div class="form-group">
<label for="date">Date</label>
<input [(ngModel)]="task.date" type="text" class="form-control" name="date" id="date" placeholder="">
</div>
<button type="submit" class="btn btn-success">Submit</button>
<button (click)="cancel()" type="cancel" class="btn btn-primary">Cancel</button>
</form>
这是我的组件:
@Component({
selector: 'app-create-new-task',
templateUrl: './create-new-task.component.html',
styleUrls: ['./create-new-task.component.css']
})
export class CreateNewTaskComponent implements OnInit {
task: Task;
constructor(
private taskService: TaskService,
private router: Router) {
}
addANewTask(form) {
console.log(form);
}
cancel() {
this.router.navigate(['/tasks']);
}
ngOnInit() {
this.task = new Task(); //This line solved the issue
}
}
我想访问表单中的值...请问我做错了吗?
基本上你有一个组件 class,它实现了 OnInit
。在大多数面向对象的环境中,在 constructor
中进行实际的初始化,而不是在 Angular 中。在 Angular 中,构造函数正在初始化 class 而不是组件。 Read more.
所以,基本上你有一个事件挂钩,它是 ngOnInit
,它在构造函数之后不久运行,ngOnInit
将实际初始化组件。您的模板将尝试使用 task
,假设它是组件的 属性,但只有在为组件初始化时才能这样做。
有关生命周期挂钩的更多信息:https://angular.io/guide/lifecycle-hooks
我想创建一个寺庙驱动的表格,我想从表格中访问值,但是我收到了这个错误:
CreateNewTaskComponent.html:8 ERROR TypeError: Cannot read property 'id' of undefined
这是我的表格:
<form #taskForm="ngForm" (ngSubmit)="addANewTask(taskForm.value)">
<div class="form-group">
<label for="id">Task Id:</label>
<input [(ngModel)]="task.id" type="text" class="form-control" name="id" id="id" placeholder="">
</div>
<div class="form-group">
<label for="description">Description</label>
<input [(ngModel)]="task.description" type="text" class="form-control" name="description" id="description" placeholder="">
</div>
<div class="form-group">
<label for="date">Date</label>
<input [(ngModel)]="task.date" type="text" class="form-control" name="date" id="date" placeholder="">
</div>
<button type="submit" class="btn btn-success">Submit</button>
<button (click)="cancel()" type="cancel" class="btn btn-primary">Cancel</button>
</form>
这是我的组件:
@Component({
selector: 'app-create-new-task',
templateUrl: './create-new-task.component.html',
styleUrls: ['./create-new-task.component.css']
})
export class CreateNewTaskComponent implements OnInit {
task: Task;
constructor(
private taskService: TaskService,
private router: Router) {
}
addANewTask(form) {
console.log(form);
}
cancel() {
this.router.navigate(['/tasks']);
}
ngOnInit() {
this.task = new Task(); //This line solved the issue
}
}
我想访问表单中的值...请问我做错了吗?
基本上你有一个组件 class,它实现了 OnInit
。在大多数面向对象的环境中,在 constructor
中进行实际的初始化,而不是在 Angular 中。在 Angular 中,构造函数正在初始化 class 而不是组件。 Read more.
所以,基本上你有一个事件挂钩,它是 ngOnInit
,它在构造函数之后不久运行,ngOnInit
将实际初始化组件。您的模板将尝试使用 task
,假设它是组件的 属性,但只有在为组件初始化时才能这样做。
有关生命周期挂钩的更多信息:https://angular.io/guide/lifecycle-hooks