文字列に対してAngular2でlimitTo
パイプを実行しようとしています:
{{ item.description | limitTo : 20 }}
そして、私は次のエラーを受け取ります:
The pipe 'limitTo' could not be found
これは私の app.module
import 'TruncatePipe} from' ./limit-to.pipe ';
@NgModule({
imports: [
BrowserModule,
FormsModule,
HttpModule,
InMemoryWebApiModule.forRoot(InMemoryDataService),
RouterModule.forRoot([
{
path: '',
redirectTo: '/home',
pathMatch: 'full'
},
{
path: 'home',
component: GridComponent
},
])
],
declarations: [
AppComponent,
TopNavComponent,
GridComponent,
TruncatePipe
],
providers: [
PinService,
],
bootstrap: [ AppComponent ]
})
export class AppModule { }
パイプを使用している私のグリッドコンポーネント:
import { Component,OnInit } from '@angular/core';
import { Router } from '@angular/router';
@Component({
moduleId : module.id,
selector: 'my-grid',
templateUrl : 'grid.component.html',
styleUrls: [ 'grid.component.css']
})
export class GridComponent implements OnInit{
constructor(
private router: Router,
private gridService: GridService) {
}
ngOnInit(): void {
}
}
私のパイプの定義:
import { PipeTransform, Pipe } from '@angular/core';
@Pipe({
name: 'limitToPipe'
})
export class TruncatePipe implements PipeTransform {
transform(value: string, limit: number) : string {
let trail = '...';
return value.length > limit ? value.substring(0, limit) + trail : value;
}
}
そして最後に、私のテンプレート:
<div *ngFor="let item of items" class="grid-item">
<p class="simple-item-description">
{{ item.description | limitToPipe : 20 }}
</p>
</div>
まず、パイプを作成する必要があります。
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'limitTo'
})
export class TruncatePipe {
transform(value: string, args: string) : string {
// let limit = args.length > 0 ? parseInt(args[0], 10) : 10;
// let trail = args.length > 1 ? args[1] : '...';
let limit = args ? parseInt(args, 10) : 10;
let trail = '...';
return value.length > limit ? value.substring(0, limit) + trail : value;
}
}
Module.tsファイルにパイプを追加します
import { NgModule } from '@angular/core';
import { TruncatePipe } from './app.pipe';
@NgModule({
imports: [
],
declarations: [
TruncatePipe
],
exports: [
]
})
export class AppModule { }
次に、バインディングコードでパイプを使用します。
{{ item.description | limitTo : 20 }}
デモ plunker
削除された質問に答えるために、yesとnoを選択します。 limitTo
は削除されたようですが、基本的にslice
と同じlimitTo
パイプがあり、リストだけでなく文字列でも使用できます。また、指定された開始インデックスで制限を開始する機会を提供します。これは適切です。
あなたの場合、単純な{{ item.description | slice:0:20 }}
で十分でしょう。あなたがあなた自身のパイプを書くより多くの経験を得たいと思わない限り、私はそれを奨励する;)
ソースとドキュメント: https://angular.io/docs/ts/latest/api/common/index/SlicePipe-pipe.html
代わりに ng2-truncate を使用できます
単語による切り捨て、文字による切り捨て、左側の切り捨て(... abc)などのオプションがあります。
$ npm install ng2-truncate --save
宣言
import { Component } from '@angular/core';
import { TruncateModule } from 'ng2-truncate';
@Component({
selector: 'my-component',
template: '<p>{{ "123456789" | truncate : 3 }}</p>'
})
export class MyComponent {
}
@NgModule({
imports: [ TruncateModule ],
declarations: [ MyComponent ]
})
export class MyApp { }
成分
@Component({
...
template: '<p>{{ "123456789" | truncate : 3 : "..." }}</p>',
...
})
結果:
<p>123...</p>