Trying to write a custom pipe to hide some items.
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>
COMPONENT
import { ShowPipe } from '../pipes/show.pipe';
@Component({
selector: 'results',
templateUrl: 'app/templates/results.html',
pipes: [PaginatePipe, ShowPipe]
})
My item has the property of visible, which can be true or false.
However nothing showing, is there something wrong with my pipe?
I think my pipe is working because when I change the pipe code to:
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;
}
}
It will show all items.
Thanks
I'm pretty sure this is because you have an initial value of
[]
foritems
. When you then later add items toitems
, the pipe is not reexecuted.Adding
pure: false
should fix it:pure: false
has a big performance impact. Such a pipe is called every time change detection runs, which is quite often.A way to make a pure pipe being called is to actually change the input value.
If you do
every time after
items
was modified (added/removed) makes Angular recognize the change and re-execute the pipe.