Angular 获得;无法读取属性';toUpperCase';“未定义”的定义;在角度模板中使用Array.filter()时

Angular 获得;无法读取属性';toUpperCase';“未定义”的定义;在角度模板中使用Array.filter()时,angular,Angular,我在使用角度模板中的Array.filter时遇到上述错误。但是,如果我创建一个管道来过滤数组,它可以正常工作 引发错误的代码:无法读取未定义的属性“toUpperCase” <div *ngFor="let i of ([0,1,2,3,5].filter((val)=>val>2))"></div> 完全错误: <div *ngFor="let i of ([0,1,2,3,5]|filterArray)">{{i}}</div>

我在使用角度模板中的
Array.filter
时遇到上述错误。但是,如果我创建一个
管道
来过滤数组,它可以正常工作

引发错误的代码:无法读取未定义的属性“toUpperCase”

<div *ngFor="let i of ([0,1,2,3,5].filter((val)=>val>2))"></div>

完全错误:

<div *ngFor="let i of ([0,1,2,3,5]|filterArray)">{{i}}</div>
Uncaught Error: Template parse errors:
TypeError: Cannot read property 'toUpperCase' of undefined ("


<div [ERROR ->]*ngFor="let i of ([0,1,2,3,5].filter((val)=>val>2))"></div>
<!--<div *ngFor="let i of ([0,1,2,3,5]|f"): ng:///AppModule/AppComponent.html@3:5
    at syntaxError (compiler.js:215)
    at TemplateParser.push../node_modules/@angular/compiler/fesm5/compiler.js.TemplateParser.parse (compiler.js:14702)
    at JitCompiler.push../node_modules/@angular/compiler/fesm5/compiler.js.JitCompiler._parseTemplate (compiler.js:22709)
    at JitCompiler.push../node_modules/@angular/compiler/fesm5/compiler.js.JitCompiler._compileTemplate (compiler.js:22696)
    at compiler.js:22639
    at Set.forEach (<anonymous>)
    at JitCompiler.push../node_modules/@angular/compiler/fesm5/compiler.js.JitCompiler._compileComponents (compiler.js:22639)
    at compiler.js:22549
    at Object.then (compiler.js:206)
    at JitCompiler.push../node_modules/@angular/compiler/fesm5/compiler.js.JitCompiler._compileModuleAndComponents (compiler.js:22548)
syntaxError @ compiler.js:215
push../node_modules/@angular/compiler/fesm5/compiler.js.TemplateParser.parse @ compiler.js:14702
push../node_modules/@angular/compiler/fesm5/compiler.js.JitCompiler._parseTemplate @ compiler.js:22709
push../node_modules/@angular/compiler/fesm5/compiler.js.JitCompiler._compileTemplate @ compiler.js:22696
(anonymous) @ compiler.js:22639
push../node_modules/@angular/compiler/fesm5/compiler.js.JitCompiler._compileComponents @ compiler.js:22639
(anonymous) @ compiler.js:22549
then @ compiler.js:206
push../node_modules/@angular/compiler/fesm5/compiler.js.JitCompiler._compileModuleAndComponents @ compiler.js:22548
push../node_modules/@angular/compiler/fesm5/compiler.js.JitCompiler.compileModuleAsync @ compiler.js:22508
push../node_modules/@angular/platform-browser-dynamic/fesm5/platform-browser-dynamic.js.CompilerImpl.compileModuleAsync @ platform-browser-dynamic.js:143
push../node_modules/@angular/core/fesm5/core.js.PlatformRef.bootstrapModule @ core.js:4182
./src/main.ts @ main.ts:11
__webpack_require__ @ bootstrap:76
0 @ main.ts:12
__webpack_require__ @ bootstrap:76
checkDeferredModules @ bootstrap:43
webpackJsonpCallback @ bootstrap:30
(anonymous) @ main.js:1
未捕获错误:模板分析错误:
TypeError:无法读取未定义(“”)的属性“toUpperCase”
]*ngFor=“let i of([0,1,2,3,5])。过滤器((val)=>val>2))”>

这是Angular抛出的一个通用错误,每当模板出现问题时,Angular本身就会抛出这个错误

在这种情况下,您试图在模板本身中使用filter的arrow函数,这是错误的

此外,首先这样做不是一个明智的想法。每次运行更改检测时,都会重新执行此筛选器调用,这将带来巨大的性能问题。因此,我要求您筛选component.ts中的项并将其绑定。

您可以使用:

<div *ngFor="let item of ([0, 1, 2, 3, 4, 5, 6])">
  <p *ngIf="item> 2">
      {{item}}
  </p>
</div>


{{item}}


你能发布模板吗,因为我看不到你正在调用ToUpperCase!这个错误没有帮助。这是全部代码,模板或项目中没有其他内容。添加了stackblitz链接我很确定你可能没有定义[arrow]角度表达式中的函数。箭头函数不会在html模板上工作,因为它们是从cofeescript派生的,而cofeescript又不是模板驱动的
<div *ngFor="let item of ([0, 1, 2, 3, 4, 5, 6])">
  <p *ngIf="item> 2">
      {{item}}
  </p>
</div>