2016-05-11 148 views
0

我在繼續關於在egghead.com上使用Angular 2的約翰林德奎斯特(John Lindquist)以及完成與他完全相同的事情之後,我沒有得到相同的結果。Angular 2自定義管道

這是關於課程17

我有一個自定義過濾器,其完美的作品:

開始,pipe.ts

import {Pipe} from '@angular/core'; 

@Pipe({ 
    name: "started" 
}) 

export class StartedPipe{ 
    transform(value, [status]){ 
     return value.filter((item)=> item.status === "started"); 
    } 
} 

待辦事項,list.ts

import {Component, Input} from '@angular/core'; 
import {TodoService} from "./todo-service"; 
import {TodoItemRenderer} from "./todo-item-renderer"; 
import {StartedPipe} from './started-pipe'; 

@Component({ 
    selector: 'todo-list', 
    pipes: [StartedPipe], 
    directives: [TodoItemRenderer], 
    template: ` 
     <div> 
      <ul> 
       <li *ngFor="let todo of todoService.todos | started :  'started'"> 
        <todo-item-renderer 
        [todo]="todo" 
        (toggle)="todoService.toggleTodo($event)"> 
        </todo-item-renderer> 
       </li> 
      </ul> 
     </div> 
    ` 
}) 

export class TodoList{ 
    @Input() status; 
    constructor(public todoService: TodoService){} 
} 

但是當我想使用我的變換值的數組arg時,它不再起作用:

開始,pipe.ts

import {Pipe} from '@angular/core'; 

@Pipe({ 
    name: "started" 
}) 

export class StartedPipe{ 
    transform(value, [status]){ 
     return value.filter((item)=> item.status === status); 
    } 
} 

如果你有一個想法,它的歡迎!

謝謝。

回答

5

您需要更改的語法有點:

transform(value, status){ // remove brackets from status 

beta.16管變換籤名起價

export interface PipeTransform { transform(value: any, args: any[]): any; } 

已更改爲

export interface PipeTransform { transform(value: any, ...args: any[]): any; } 

見還有:https://github.com/angular/angular/blob/master/CHANGELOG.md#breaking-changes-1

+0

非常感謝好友。 –

+0

嗨夥計:)一個問題:你確定這仍然是做到這一點的方法嗎?看來我不能再有組件上的管道屬性了。 – johnnyfittizio

+1

@johnnyfittizio你應該在模塊的'declarations'數組中聲明你的管道 – yurzui