大佬教程收集整理的这篇文章主要介绍了AngularJs – ngRepeat,带有一个返回新对象的过滤器,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
>使用跟踪表达式(如track by item.id)并将原始对象的ID分配给每个已转换的对象.虽然我的所有对象当前都有id,但这似乎是一个坏主意,因为它使得过滤器不那么通用 – 原始对象必须具有id,转换不能设置id(因为它将被覆盖)等.
>将原始对象的$$id分配给已转换的对象.基于我的理解,这似乎是hackish,$$id应该是只读的.
>根据转换过滤的结果返回原始对象的子集.这可能会导致性能问题,因为需要在过滤器和显示表达式中应用转换,并且我必须循环回转换/过滤的项目以选择要返回的正确原始项目.
这是过滤器:
listModule.filter('ui.filter.transformFilter',['$filter','$id',function($filter,$id) { var Filter = $filter('filter'); return function(objects,transformer,expression) { // precondition- we need a list of objects if (!_.isArray(objects)) { return objects; } var transformed = []; for (var i = 0; i < objects.length; i++) { transformed[i] = transformer(objects[i]); } return filtered = Filter(transformed,expression); } }] );
以下是我尝试使用它的方法:
<tr ng-repeat="item in list.items | ui.filter.transformFilter:list.transformerFunction:list.search" ng-click="list.SELEct({'item': item})" class="list-item"> <td ng-repeat="label in list.labels" ng-bind-html="item[label.key]"></td> </tr>
_.memoize
来缓存你的函数的结果.
这将保证对于任何给定的缓存键,您的过滤器将始终返回完全相同的对象(包括$$id).这样您就不必使用$$id玩游戏,并且您可以获得不必在每个$digest循环上重新计算过滤结果的性能优势.
以下是缓存过滤器结果的方法:
return _.memoize(function(objects,expression) { ... },function(objects,expression){ return objects +transformer.name + expression; });
对于您的情况,一个重要的注意事项是,默认情况下_.memoize使用第一个函数参数(在本例中为对象)作为缓存键.由于您的过滤器在给定不同的变换器函数和表达式时可能会产生不同的结果,因此我添加了可选的第二个参数 – 一个使用对象,表达式和变换器函数名称的哈希函数来生成缓存键.
以上是大佬教程为你收集整理的AngularJs – ngRepeat,带有一个返回新对象的过滤器全部内容,希望文章能够帮你解决AngularJs – ngRepeat,带有一个返回新对象的过滤器所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。