为什么我不能在我的angular 2 typescript代码中使用indexOf函数?

时间:2017-02-01 14:34:16

标签: javascript angular

我收到错误:

EXCEPTION:value.indexOf不是函数

每当我尝试使用javascript函数时。这是代码:

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

@Pipe({
    name: 'id'
})
export class IdPipe {
    transform(value: string): string {
        let start = value.indexOf('"id": "')
        let id = value.substring(start + 7, start + 7 + 36);

        return id;
    }
}

我需要做些什么来完成这项工作?我在其他人的代码中看到了类似的例子,所以我认为这应该有效。

2 个答案:

答案 0 :(得分:2)

你应该在转换函数的开头插入条件

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

@Pipe({
    name: 'id'
})
export class IdPipe {
    transform(value: string): string {
        if(value !== null && value !== undefined){
          let start = value.indexOf('"id": "')
          let id = value.substring(start + 7, start + 7 + 36);

          return id;
        }    
    }
}

答案 1 :(得分:0)

您的管道将被执行多次。有些时候,比如你的组件还没有完全初始化,"值"将是null或可能undefined,然后它将不具有indexOf方法。这就是您收到此错误的原因。

添加安全检查:

transform(value: string): string {
    if (!value) return value;

    let start = value.indexOf('"id": "')
    let id = value.substring(start + 7, start + 7 + 36);

    return id;
}

(我一般认为最好尽早回来,但Yoav Schniederman的回答也完全有效。)