angular6:将输入字段的值传递给组件

问题描述 投票:3回答:3

我试图将输入字段的值传递给组件类。但它似乎没有奏效。请找到以下代码:

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>
    &nbsp; &nbsp;
    <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)

我正在使用角度材质框架来渲染元素。谁能让我知道我在这里做错了什么?

谢谢

angular parameter-passing angular6
3个回答
2
投票

尝试将#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>
    &nbsp; &nbsp;
    <button mat-raised-button color="primary" type="button" (click)="addTodo(todo.value)">Add Todo
    </button>
  </form>
</mat-card>

1
投票

我认为可能更容易使用的替代方法是拥有一个支持字段并绑定到它:

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>
    &nbsp; &nbsp;
    <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);
    })
  }

通过这种方式,可以更轻松地执行验证输入值的操作,并在成功提交后将字段重置为空。


0
投票

在元素中使用#todo:

<input matInput type="text" name="todo" #todo placeholder="Enter a todo">

并使用:

{{ todo.value }}
© www.soinside.com 2019 - 2024. All rights reserved.