在ngFor内部按值过滤项目,而无需编写管道。
问题的出现原因:在ngFor循环中过滤项目的值时,通常会使用管道,但是在Angular v6+版本中不再推荐使用管道来过滤数据。这是因为管道在生产部署中存在代码压缩问题,并且非纯管道在每次更新时都需要重新运行,会导致性能问题。为了解决这个问题,Angular开发团队建议使用过滤函数来过滤数据。
解决方法:可以使用一个过滤函数来过滤数据,并在模板中调用这个函数来实现过滤。具体步骤如下:
1. 在组件中定义一个过滤函数,例如filterFunction,函数接受一个参数allButtons,并返回一个经过过滤后的数组:
filterFunction(allButtons): any[] { return allButtons.filter(button => button !== this.mode); }
2. 在模板中使用ngFor指令循环遍历数据,并调用filterFunction函数来过滤数据,例如:
通过以上方法,就可以在不使用管道的情况下实现对数据的过滤。
需要注意的是,如果需要过滤对象而不是简单的值,推荐使用现有的组件来实现。可以参考Angular官方文档中的相关链接获取更多信息。
在Angular v6+版本中,推荐使用过滤函数而不是管道来过滤数据。这样可以避免代码压缩问题和性能问题,并将逻辑代码从模板中转移到typescript文件中,以防止过时。
问题的原因是在ngFor循环中,想要根据条件筛选出特定的项,但是不想使用管道来实现。解决方法是使用ng-template和ngIf结合,将条件放在ngIf中,实现筛选功能。
具体的解决方法如下:
在以上代码中,ng-template用于循环模板,ngFor用于循环数组modes,let-othermode用于定义循环的临时变量。在button上使用ngIf来判断othermode是否满足条件,如果满足则显示该button。
需要注意的是,如果在ng-template中使用let-语法,会导致"let-" is only supported on template elements.错误的发生。因此,应该将let-语法放在ng-template中使用。
以上代码在stackblitz中可以正常工作,你可以通过这个链接查看工作版本。
希望以上内容对你有帮助!