web-dev-qa-db-ja.com

角度:limitToパイプが機能しない

文字列に対してAngular2でlimitToパイプを実行しようとしています:

{{ item.description | limitTo : 20 }} 

そして、私は次のエラーを受け取ります:

The pipe 'limitTo' could not be found

このパイプがAngular2で削除された可能性はありますか?

これは私の 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>
19
Yuvals

まず、パイプを作成する必要があります。

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

21
Libu Mathew

削除された質問に答えるために、yesとnoを選択します。 limitToは削除されたようですが、基本的にsliceと同じlimitToパイプがあり、リストだけでなく文字列でも使用できます。また、指定された開始インデックスで制限を開始する機会を提供します。これは適切です。

あなたの場合、単純な{{ item.description | slice:0:20 }}で十分でしょう。あなたがあなた自身のパイプを書くより多くの経験を得たいと思わない限り、私はそれを奨励する;)

ソースとドキュメント: https://angular.io/docs/ts/latest/api/common/index/SlicePipe-pipe.html

62
Daniel Varela

代わりに 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>
2
Frank Nguyen