You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular新手如何将输入框值存入数组并通过HTML列表展示及报错解决

问题解决方法

错误原因

这个报错是TypeScript默认类型推断导致的:你声明todoArray = []时没有指定类型,TS会自动将空数组推断为never[]类型,这类数组只允许存放不可能存在的值,所以无法存入字符串类型的输入内容。

核心修复方案

修改app.component.ts中todoArray的声明,显式指定数组类型为字符串数组即可:

// 修改前
todoArray = [];
// 修改后
todoArray: string[] = [];

其他附带问题修复

你现有代码还有几处逻辑问题,会导致功能无法正常运行,可同步修改:

  1. 模板遍历渲染错误:*ngFor遍历得到的每一项变量名为item,你当前模板写的{{todo}}和deleteItem(todo)会导致所有列表项内容相同、删除功能失效,修改列表项代码为:
<li [@moveInLeft]  *ngFor="let item of todoArray">{{item}} <i (click)="deleteItem(item)" class="material-icons">delete</i></li>
  1. 删除方法数组越界问题:deleteItem中的循环条件i<= this.todoArray.length会访问到数组不存在的下标,修改循环条件,匹配到目标项后直接跳出循环提升性能:
deleteItem(todo: string){
  for(let i=0 ;i < this.todoArray.length ;i++){
    if(todo == this.todoArray[i]){
      this.todoArray.splice(i,1)
      break
    }
  }
}
  1. 表单提交逻辑错误:todoForm.value是包含表单字段的对象,不是字符串,且提交后需要调用addTodo方法把内容存入数组,修改提交方法为:
todoSubmit(value:any){
  if(value.todo?.trim() !==""){
    this.addTodo(value.todo)
  }else{
    alert('Field required **')
  }
}

内容的提问来源于stack exchange,提问作者Mortech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:48:03