2017-02-01 2 views
0

я получаю ошибку:Почему я не могу использовать функцию indexOf в своем угловом 2 машинописном коде?

ИСКЛЮЧЕНИЕ: value.indexOf не является функцией

всякий раз, когда я пытаюсь использовать функцию яваскрипта. Вот код:

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; 
    } 
} 

Что мне нужно сделать, чтобы сделать эту работу? Я вижу подобные примеры в коде других людей, поэтому я думаю, что это должно сработать.

+1

Вы можете проверить тип на старте функционировать? 'console.log (typeof value);' – Tholle

+0

Ошибка означает, что значение 'value' является тем, что не имеет свойства' indexOf'. Вы можете 'console.log (typeof value)' перед этим, чтобы посмотреть, что происходит. – Pointy

ответ

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; 
     }  
    } 
} 
0

Ваша труба будет выполняться несколько раз. Некоторые из этих времен, например, когда ваш компонент еще не полностью инициализирован, «значение» будет null или, возможно, undefined, а затем оно не будет иметь метод indexOf. Вот почему вы получаете эту ошибку.

Добавить проверку безопасности: (. Я вообще найти это предпочтительнее, чтобы вернуться рано, но ответ Йоав Schniederman является вполне допустимо, а)

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

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

    return id; 
} 

Смежные вопросы