Angular 2 Custom Pipe

时间:2016-05-11 19:59:50

标签: angular

我正在关注egghead.com上关于Angular 2的John Lindquist,并且在完成与他完全相同的事情后,我的结果并不相同。

这是关于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);
    }
}

如果您有任何想法,欢迎它!

感谢。

1 个答案:

答案 0 :(得分: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

相关问题