Проблема с Angular (и JHipster): value.toLowerCase не является функцией - PullRequest
0 голосов
/ 18 февраля 2019

С моим фильтром (для фильтрации строк сущности с помощью поиска по полю) возникает эта проблема: ERROR TypeError: "value.toLowerCase is not a function".Я не знаю почему и как это решить.Полями моей сущности являются Строка, кроме идентификатора, и проблема все еще присутствует, когда я комментирую строку searchText = searchText.toLowerCase(); в .ts или удаляю toLowerCase() в return it.toLowerCase().includes(searchText);

ОБНОВЛЕНИЕ: Проблема возникает даже с:

export class FilterPipe implements PipeTransform {
    transform(items: any[], searchText: string): void {
}

Итак Мне действительно интересно, нет ли ограничения JHipster, потому что оно отлично работает только с Angular как ng serve.

.ts:

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

@Pipe({
    name: 'filter'
})
export class FilterPipe implements PipeTransform {
transform(items: any[], searchText: string): any[] {
    if (!items) {
        return [];
    }
    if (!searchText) {
        return items;
    }

    searchText = searchText.toLowerCase();

    return items.filter(it => {
        return it.toLowerCase().includes(searchText);
    });
}
}

.html:

<div class="table-responsive" *ngIf="laboratories">
    <table class="table table-striped">
        <thead>
        <tr>
            <th><span>ID</span></th>
            <th><span>Name</span></th>
            <th><span>Adress</span></th>
            <th></th>
        </tr>
        </thead>
        <tbody>
        <tr *ngFor="let laboratory of laboratories | filter:searchText ;trackBy: trackId">

1 Ответ

0 голосов
/ 18 февраля 2019

Вы перебираете коллекций .Когда вы используете ngFor, он перебирает массив.Я предполагаю, что это массив лабораторий.

Это означает, что ваши объекты - лаборатории.

В своем коде вы считаете свою лабораторию строкой:

return items.filter(it => {
  return it.toLowerCase().includes(searchText);
});

Может быть, вам нужно добавить какое-нибудь поле для фильтрации?

return items.filter(it => {
  return it.name.toLowerCase().includes(searchText);
});

Также, как указано в моем комментарии:

НЕ использовать фильтрующие трубы

...