我已经创建了一个能够使用
*ngFor
with objects的管道.但是,当更新对象时,管道不会更新.我通过使用带有pure:false的有状态管道找到了解决方案
here.
对于我的用例,这个解决方案在性能方面是不可接受的,因为它会为每次更改刷新管道(我几乎到处都使用这个管道来渲染复杂的元素).
有没有办法触发管道的手动刷新,所以它只在我想要时刷新?
这是一个plunker – 要查看问题,请尝试通过单击 – 按钮删除名称.如果你添加pure:false,你会看到它会起作用:
@Pipe({name: 'keys',pure: false}) export class Keys implements PipeTransform { transform(value,args:string[]) : any { let keys = []; for (let key in value) { keys.push({key: key,value: value[key]}); } return keys; } }
使纯管变得不纯的一种方法是向管道添加参数.
原文链接:https://www.f2er.com/angularjs/240336.html如果要刷新,只需更改参数即可.
没有参数的另一种方式
当输入具有新实例时,Pure Pipe将被触发.因此,对于TypeScript 2.1,下面的代码将使用新实例复制原始对象,并引导纯粹的管道被触发.
let copy = { ...original }
这两种方式都包含在stackbliz demo中.