2016-05-11 150 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