我试图将输入字段的值传递给组件类。但它似乎没有奏效。请找到以下代码:
todoinput.component.html
<mat-card>
<form>
<mat-form-field class="example-full-width">
<input matInput type="text" name="todo" placeholder="Enter a todo">
</mat-form-field>
<button mat-raised-button color="primary" type="button" (click)="addTodo(todo.value)">Add Todo
</button>
</form>
</mat-card>
todoinput.component.ts
addTodo(text) {
this._todosService.addTodo({
text: text,
}).subscribe((todo) => {
return this.newTodo.emit(todo);
})
}
但是单击该按钮会引发以下错误:
ERROR TypeError: Cannot read property 'value' of undefined
at Object.eval [as handleEvent] (TodoinputComponent.html:7)
at handleEvent (core.js:10258)
我正在使用角度材质框架来渲染元素。谁能让我知道我在这里做错了什么?
谢谢
尝试将#todo
添加到输入中。之后,角度应该能够访问正确的输入。没有它,它会得到未定义的变量。
<mat-card>
<form>
<mat-form-field class="example-full-width">
<input #todo matInput type="text" name="todo" placeholder="Enter a todo">
</mat-form-field>
<button mat-raised-button color="primary" type="button" (click)="addTodo(todo.value)">Add Todo
</button>
</form>
</mat-card>
我认为可能更容易使用的替代方法是拥有一个支持字段并绑定到它:
HTML:
<mat-card>
<form>
<mat-form-field class="example-full-width">
<input [(ngModel)]="todo" matInput type="text" name="todo" placeholder="Enter a todo">
</mat-form-field>
<button mat-raised-button color="primary" type="button" (click)="addTodo()">Add Todo
</button>
</form>
</mat-card>
TS
todo = '';
addTodo() {
if (!this.todo) {
return;
}
this._todosService.addTodo({
text: this.todo,
}).subscribe((todo) => {
this.todo = '';
return this.newTodo.emit(todo);
})
}
通过这种方式,可以更轻松地执行验证输入值的操作,并在成功提交后将字段重置为空。
在元素中使用#todo:
<input matInput type="text" name="todo" #todo placeholder="Enter a todo">
并使用:
{{ todo.value }}