【发布时间】:2020-08-23 20:30:55
【问题描述】:
在其他人对 stackoverflow 的回答的帮助下,我创建了一个自定义管道。如果article.title 大于 55 个字符,那么它应该在 55 个字符后被修剪,三个点应该像尾巴一样在那里。例如:
- 如何做蛋糕
- 如何制作冷饮...
- 在家做咖喱...
- 美味的西班牙鸡蛋
注意第 2 点和第 3 点如何修剪多余的字符并将其替换为 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 { }
app.component.html
<h5 class="card-title">{{article.title | ellipsis:55}}</h5>
请纠正我的错误。这个问题没有帮助: Custom pipe returns an error. ::TypeScript & Angular2.
PS:完全错误是:
src/app/pipes/ellipsis.pipe.ts(11,3) 中的错误:错误 TS2416:属性 'EllipsisPipe' 类型中的 'transform' 不能分配给相同的 基本类型“SlicePipe”中的属性。键入'(值:字符串,最大长度: number) => any' 不可分配给类型 '{ (value: readonly T[], 开始:数字,结束?:数字):T[]; (值:字符串,开始:数字, 结束?:数字):字符串; (值:空,开始:数字,结束?:数字): 空值; (值:未定义,开始:数字,结束?:数字):未定义; }'。 参数 'value' 和 'value' 的类型不兼容。 类型 'readonly any[]' 不能分配给类型 'string'。
一个奇怪的事情是它正在处理 stackblitz 但在 localhost:4200 上出现上述错误。
【问题讨论】:
-
我猜是因为transform方法中参数值的类型应该是string[]
-
我刚刚添加了一个堆栈闪电战。它在那里工作。奇怪的事情。
标签: angular typescript angular-pipe