Как отфильтровать поле объекта внутри объекта в Angular Pipe в Angular 6? - PullRequest
0 голосов
/ 03 апреля 2019

Я использую Angular 6 Pipe.Я хочу фильтровать или искать из поля таблицы.Я загрузил данные списка в таблицу.Я создал собственный файл канала.Я могу отфильтровать или выполнить поиск объекта, например (Applicant.vivaBoardId), из списка, но не могу отфильтровать или выполнить поиск из поля объекта (Applicant.studentInfo.formSerialNo или Applicant.studentInfo.firstName) внутри объекта.

// код трубного фильтра

@Pipe({
name: 'searchFilters'
})
export class IdAndNameFilterPipe implements PipeTransform {

  transform(items: any, filter: any, defaultFilter: boolean): any {
    if (!filter){
        return items;
    }

    if (!Array.isArray(items)){
        return items;
    }

    if (filter && Array.isArray(items)) {
        let filterKeys = Object.keys(filter);

        if (defaultFilter) {
            return items.filter(item =>
                filterKeys.reduce((x, keyName) =>
                    (x && new RegExp(filter[keyName], 'gi').test(item[keyName])) || filter[keyName] == "", true));
        }
        else {
            return items.filter(item => {
                return filterKeys.some((keyName) => {
                    return new RegExp(filter[keyName], 'gi').test(item[keyName]) || filter[keyName] == "";
                });
            });
        }
    }
}

}

// html code

    <input placeholder="Search by Form Sl" name="searchFilter [(ngModel)]="searchFilter">
    <table>
       <thead>
           <tr>
               <th>Form SL</th><th>Name</th><th>Viva Board Id</th><th>Viva Marks</th>
           </tr>
       </thead>
       <tbody>
           <tr *ngFor="let applicant of applicantListForVivaMarksEntry | searchFilters: {formSerialNo: searchFilter}">
               <td>{{applicant.studentInfo.formSerialNo}}</td>
               <td>{{applicant.studentInfo.firstName}}</td>
               <td>{{applicant.vivaBoardId}}</td>
            </tr>
        </tbody>
     </table>
...