【问题标题】:Angular 4 pipe Cannot read property 'toLowerCase' of undefinedAngular 4管道无法读取未定义的属性“toLowerCase”
【发布时间】:2018-06-01 18:56:06
【问题描述】:

我已经实现了以下过滤器/管道来大写首字母,导入到 module.ts 等中。

管道.ts

import { Pipe, PipeTransform } from '@angular/core';


@Pipe({name: 'capitalize'})
export class CapitalizePipe implements PipeTransform {

   transform(str:any) {

     var splitStr = str.toLowerCase().split(' ');
    for (var i = 0; i < splitStr.length; i++) {

        splitStr[i] = splitStr[i].charAt(0).toUpperCase() + 
        splitStr[i].substring(1);     
    }
    // Directly return the joined string
    return splitStr.join(' '); 
   }
 }

一切正常,除非我在这个表达式中使用它,我得到 - 无法读取未定义的属性'toLowerCase'

 {{messageItem?.cc && messageItem?.cc[0]?.name | capitalize}}

【问题讨论】:

  • 这是异步的,所以管道在数据到达之前执行,因此undefined
  • 有什么办法解决吗?
  • 尝试使用不纯管道而不是纯管道...使用pure: false
  • 你为什么用答案更新问题?现在你的问题/错误日志没有意义
  • 不错,已更新,谢谢!

标签: angular filter pipe


【解决方案1】:

管道初始执行为 null,因为这是异步的。你需要处理undefined 变量

var splitStr = str.toLowerCase().split(' ') || []

【讨论】:

    【解决方案2】:

    在调用.toLowerCase之前在管道中添加一个空/未定义检查以检查字符串是否为空

    if (str === undefined) return [];
    

    【讨论】:

    猜你喜欢
    • 2018-08-07
    • 1970-01-01
    • 2021-11-28
    • 2021-08-01
    • 2018-11-30
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多