фильтрации есть кнопки.
На https://angular-ivy-j2cqv4.stackblitz.io фильтрация работает без проблем, как по title, так и по text. Но в коде на компе ошибка в строке:
"return post[field].toLocaleLowerCase().includes(search.toLocaleLowerCase()) - ругается на post[field]"
Ссылка на код https://stackblitz.com/edit/angular-ivy-j2cqv4?file=src/app/pipes/filter.pipe.ts
Подскажите, пожалуйста, что делаю не так?
А как ругается? post[field]?.toLocaleLowerCase() либо (post as any)[field]?.toLocaleLowerCase() либо более красиво (post as Record<string, string>)[field]?.toLocaleLowerCase() Должно решить проблему
а что если типизировать field в аргументах пайпа: field: 'title'|'text' = 'title' ?
как вариант в пайпе можно ‘field: any’ заменить на “field: keyof Post”
Текст ошибки: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Post'. No index signature with a parameter of type 'string' was found on type 'Post' Вариант с post[field]?.toLocaleLowerCase() - ошибка сохраняется (post as any)[field]?.toLocaleLowerCase() - работает (post as Record<string, string>)[field]?.toLocaleLowerCase() - работает Спасибо огромное 🙂
c keyof вариант вероятнее даже правильнее https://t.me/angular_ru/502582
В таком случае ошибка в app.component.html в строке " *ngFor="let post of posts | filter: search:searchField"" Текст ошибки: Argument of type 'string' is not assignable to parameter of type 'keyof Post' Конкретно подчеркивает searchField
В таком случае ошибка в app.component.html в строке " *ngFor="let post of posts | filter: search:searchField"" Текст ошибки: Argument of type 'string' is not assignable to parameter of type '"title" | "text" | undefined' Конкретно подчеркивает searchField
в апп компоненте searchField: keyof Post
Ошибка: Expected 1-3 arguments, but got 4 *ngFor="let post of posts | filter: search:searchField:keyof Post
не в темплейте) в app.component.ts
Спасибо, работает ) Надо запомнить данный вариант
Обсуждают сегодня