Angular 2:设置和删除自定义管道?

时间:2016-10-12 16:24:38

标签: angular pipe custom-pipeline-component

我已经创建了三个自定义管道从服务器订购数据(ASC,DESC和默认),它们工作正常,我希望这三个管道是否有效取决于用户的交互。

问题是,它可以改变带有变量的自定义管道吗?

这是我的代码......

<label *ngFor="let user of users | {{pipeOrderType}}:'name'">{{user.id}}{{user.name}}, </label>

1 个答案:

答案 0 :(得分:4)

无法动态分配不同的管道。 您可以根据参数

创建一个行为不同的管道
@Pipe({
  name: 'dynamicPipe'
})
class DynamicPipe implements PipeTransform {
  transform(value, pipe) {
    if(!value || !pipe) {
      return null;
    }
    return pipe.transform(value);
  }
}

管道可以像

一样使用
<label *ngFor="let user of users | dynamicPipe:pipe">{{user.id}}{{user.name}}, </label>

虽然这里pipe是对管道类的实际实例的引用,而不是字符串。 您可以将管道注入组件,如

class MyComponent {
  constructor(private pipe1:Pipe1, private pipe2:Pipe2) {}

  clickHandler() {
    if(xxx) {
      this.pipe = this.pipe1;
    } else {
      this.pipe = this.pipe2
    }
  }
}

您也可以将管道注入dynamicPipe

@Pipe({
  name: 'dynamicPipe'
})
class DynamicPipe implements PipeTransform {
  constructor(private pipe1:Pipe1, private pipe2:Pipe2) {}

  transform(value, pipe) {
    if(!value || !pipe) {
      return null;
    }
    if(pipe == 'pipe1') {
      return pipe1.transform(value);
    }
    if(pipe == 'pipe2') {
      return pipe2.transform(value);
    }
  }
}

然后使用管道名称

<label *ngFor="let user of users | dynamicPipe:pipe">{{user.id}}{{user.name}}, </label>

pipe'pipe1''pipe2'

的位置