Я создал собственный канал с помощью чужого ответа на stackoverflow. Если article.title
больше 55 символов, он должен быть обрезан после 55 символов, а три точки должны быть там, как хвост. Например:
- Как приготовить торт
- Как сделать холодный c ...
- Приготовление карри на хо ...
- Вкусный испанец sh яйца
Обратите внимание на пункты 2 и 3, как лишние символы обрезаются и заменяются тремя точками.
Вот код:
ellipses.pipe.ts
import { Pipe } from '@angular/core';
import { SlicePipe } from '@angular/common';
@Pipe({
name: 'ellipsis'
})
export class EllipsisPipe extends SlicePipe {
constructor () {
super();
}
transform(value: string, maxLength: number): any {
const suffix = value && value.length > maxLength ? "..." : "";
return super.transform(value, 0, maxLength) + suffix;
}
}
Примечание: Я тоже пробовал ...implements PipeTransform
.
app.module.ts
@NgModule({
declarations: [
...,
EllipsisPipe // <-------------------- included in app module
],
imports: [
...
],
providers: [...],
bootstrap: [AppComponent]
})
export class AppModule { }
компонент приложения. html
<h5 class="card-title">{{article.title | ellipsis:55}}</h5>
Пожалуйста, исправьте мою ошибку. Этот вопрос не помог: Пользовательский канал возвращает ошибку. :: TypeScript & Angular2 .
PS: Полная ошибка:
ОШИБКА в src / app / pipe / ellipsis.pipe.ts (11,3): error TS2416: Свойство «преобразование» в типе «EllipsisPipe» нельзя назначить тому же свойству в базовом типе «SlicePipe». Type '(value: string, maxLength: number) => any' не может быть присвоено типу '{(значение: только чтение T [], начало: число, конец ?: число): T []; (значение: строка, начало: число, конец ?: число): строка; (значение: ноль, начало: число, конец ?: число): ноль; (значение: не определено, начало: число, конец ?: число): не определено; } '. Типы параметров «значение» и «значение» несовместимы. Тип 'readonly any []' не может быть назначен типу 'string'.
Странно то, что он работает с stackblitz , но дает указанную выше ошибку на localhost: 4200 .