gpt4 book ai didi

javascript - Angular 2 过滤管

转载 作者:太空狗 更新时间:2023-10-29 18:26:44 24 4
gpt4 key购买 nike

尝试编写自定义管道来隐藏某些项目。

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

// Tell Angular2 we're creating a Pipe with TypeScript decorators
@Pipe({
name: 'showfilter'
})

export class ShowPipe {
transform(value) {
return value.filter(item => {
return item.visible == true;
});
}
}

HTML

<flights *ngFor="let item of items | showfilter">
</flights>

组件

import { ShowPipe } from '../pipes/show.pipe';

@Component({
selector: 'results',
templateUrl: 'app/templates/results.html',
pipes: [PaginatePipe, ShowPipe]
})

我的item有visible属性,可以是true也可以是false。

但是没有任何显示,是我的管道有问题吗?

我认为我的管道正在工作,因为当我将管道代码更改为:

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

// Tell Angular2 we're creating a Pipe with TypeScript decorators
@Pipe({
name: 'showfilter'
})

export class ShowPipe {
transform(value) {
return value;
}
}

它将显示所有项目。

谢谢

最佳答案

我很确定这是因为 items 的初始值为 []。当您稍后将项目添加到 items 时,管道不会重新执行。

添加 pure: false 应该可以解决这个问题:

@Pipe({
name: 'showfilter',
pure: false
})
export class ShowPipe {
transform(value) {
return value.filter(item => {
return item.visible == true;
});
}
}

pure: false 对性能有很大的影响。每次运行更改检测时都会调用这样的管道,这种情况很常见。

使纯管道被调用的一种方法是实际更改输入值。

如果你这样做

this.items = this.items.slice(); // create a copy of the array

每次修改(添加/删除)items 后,Angular 都会识别更改并重新执行管道。

关于javascript - Angular 2 过滤管,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37827925/

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