gpt4 book ai didi

angular - Angular 2中的动态管道

转载 作者:太空狗 更新时间:2023-10-29 19:32:28 25 4
gpt4 key购买 nike

我正在尝试创建一个组件,您可以在其中传递应该用于组件内部列表的管道。通过测试和四处寻找答案,我发现唯一的解决方案似乎是创建如下内容:

<my-component myFilter="sortByProperty"></my-component>

我的组件模板:

<li *ngFor="#item of list | getPipe:myFilter"></li>

然后将 myFilter 映射到正确的管道逻辑并运行它,但这似乎有点脏而且不是最优的。

我认为自 Angular 1 以来,他们会想出一个更好的解决方案来解决这个问题,您也可以按照这些思路做一些事情。

在 Angular 2 中没有更好的方法来做到这一点吗?

最佳答案

基于 borislemke 的回答,这里有一个不需要 eval() 并且我觉得相当干净的解决方案:

动态管道.ts:

import {
Injector,
Pipe,
PipeTransform
} from '@angular/core';


@Pipe({
name: 'dynamicPipe'
})
export class DynamicPipe implements PipeTransform {

public constructor(private injector: Injector) {
}

transform(value: any, pipeToken: any, pipeArgs: any[]): any {
if (!pipeToken) {
return value;
}
else {
let pipe = this.injector.get(pipeToken);
return pipe.transform(value, ...pipeArgs);
}
}
}

应用程序模块.ts:

// …
import { DynamicPipe } from './dynamic.pipe';

@NgModule({
declarations: [
// …
DynamicPipe,
],
imports: [
// …
],
providers: [
// list all pipes you would like to use
PercentPipe,
],
bootstrap: [AppComponent]
})
export class AppModule { }

应用程序组件.ts:

import { Component, OnInit } from '@angular/core';
import { PercentPipe } from '@angular/common';

@Component({
selector: 'app-root',
template: `
The following should be a percentage:
{{ myPercentage | dynamicPipe: myPipe:myPipeArgs }}
`,
providers: []
})

export class AppComponent implements OnInit {
myPercentage = 0.5;
myPipe = PercentPipe;
myPipeArgs = [];
}

关于angular - Angular 2中的动态管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52254936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com