Angular 2过滤管
Angular 2 Filter Pipe
正在尝试编写自定义管道来隐藏某些项目。
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]
})
我的商品属性可见,可真可假。
但是没有任何显示,我的管道有问题吗?
我认为我的管道工作正常,因为当我将管道代码更改为:
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
修改后 (added/removed) 都会使 Angular 识别更改并重新执行管道。
- 不推荐使用不纯管道。我会影响你的表现。
- 源码没改也会调用
- 因此,正确的替代方法是更改返回对象的引用。
@Pipe({
name: 'showfilter'
})
export class ShowPipe {
transform(value) {
value = value.filter(item => {
return item.visible == true;
});
const anotherObject = Object.assign({}, value) // or else can do cloning.
return anotherObject
}
}
正在尝试编写自定义管道来隐藏某些项目。
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]
})
我的商品属性可见,可真可假。
但是没有任何显示,我的管道有问题吗?
我认为我的管道工作正常,因为当我将管道代码更改为:
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
修改后 (added/removed) 都会使 Angular 识别更改并重新执行管道。
- 不推荐使用不纯管道。我会影响你的表现。
- 源码没改也会调用
- 因此,正确的替代方法是更改返回对象的引用。
@Pipe({
name: 'showfilter'
})
export class ShowPipe {
transform(value) {
value = value.filter(item => {
return item.visible == true;
});
const anotherObject = Object.assign({}, value) // or else can do cloning.
return anotherObject
}
}