Angular 角度5字体错误:

Angular 角度5字体错误:,angular,typescript,typeerror,undefined-function,Angular,Typescript,Typeerror,Undefined Function,我在一个项目中使用Angular 5,我得到一个typescript错误: ERROR TypeError: Cannot read property 'indexOf' of undefined 我的代码应该做的是在输入更改时更新模板,如下所示: this.candidates.filter(c => { return c.name !== null && c.name.indexOf(queryString) >= 0 }); 模板:

我在一个项目中使用Angular 5,我得到一个typescript错误:

ERROR TypeError: Cannot read property 'indexOf' of undefined
我的代码应该做的是在输入更改时更新模板,如下所示:

  this.candidates.filter(c => { 
      return c.name !== null && c.name.indexOf(queryString) >= 0 
  });
模板:

<input #f (input)="filterResults(f.value)"/>

<div *ngIf="filteredCandidates.length">
    <ul class="filtered-candidates-list">
        <li *ngFor="let candidate of filteredCandidates">
            {{ candidate.name }}
        </li>
    </ul>
</div>
我尝试在c.name上使用方法.contains(),得到了相同的结果。 与预期一样,typeof candidate.name仍然是字符串,输入也是字符串。
然而,仅仅因为合并了typescript,我就无法使用string方法。

似乎您正在尝试对集合
候选对象执行筛选操作,即使尚未从API服务器检索到该集合。通过查看您的UI,看起来您并没有基于查询字符串进行任何远程筛选。在这种情况下,我建议在开始时检索
候选者
集合,直到将
输入
框设为禁用/只读。这样可以避免意外错误的发生

HTML

<input #f (input)="filterResults(f.value)" [readonly]="candidates.length"/>

<div *ngIf="filteredCandidates.length">
    <ul class="filtered-candidates-list">
        <li *ngFor="let candidate of filteredCandidates">
            {{ candidate.name }}
        </li>
    </ul>
</div>

如果在某些情况下未定义c.name,则可以执行如下检查:

  this.candidates.filter(c => { 
      return c.name !== null && c.name.indexOf(queryString) >= 0 
  });

这里!==null将检查null和未定义的值。

多么愚蠢的错误。我不得不做一些错误处理。在数据库中,其中一个对象没有属性名(未定义)。因此,当循环到达那里时,代码中断了。我必须更好地处理错误。谢谢大家的建议。

看起来
name
未定义。在筛选器回调中设置断点,并确保已定义断点。谢谢,您的回答是正确的。数据库中的对象没有属性名称。谢谢您的建议。这似乎是数据库的问题,其中一个对象没有name属性。谢谢你的建议。
  this.candidates.filter(c => { 
      return c.name !== null && c.name.indexOf(queryString) >= 0 
  });