我有一个简单的ng-repeat正在进行:
<div class="row-fluid"> <div class="span4" ng-repeat="piece in clothes | filter:query"> <img ng-src="{{piece.mainImage[0]}}" class="thumbImg" /> <a href="#/json/{{piece.systemName}}">{{piece.name}}</a> </div> </div>
重复3次后,我想停止重复,添加一个结束< div>并打开一个新的.row-fluid(开始一个新行),然后重新启动我离开的循环,每次第三次插入标签.
Angular的文档很难遍历,因此很难弄清楚如何做到这一点.
解决方法
ngRepeat将不断重新评估过滤器,因为它每次运行时都会得到不同的值.
这个可怕的代码似乎适用于一般情况.如果你有相同的阵列,事情会变得毛茸茸.我们需要能够比较数组的相等性,但这是一个难题.我采用了简单/脆弱的方式,只使用了stringify().无法让angular.equals()为我工作;我认为它可能只适用于浅物体.
app.filter('partition',function($cacheFactory) { var arrayCache = $cacheFactory('partition') return function(arr,size) { var parts = [],cachedParts,jsonArr = JSON.stringify(arr); for (var i=0; i < arr.length; i += size) { parts.push(arr.slice(i,i + size)); } cachedParts = arrayCache.get(jsonArr); if (JSON.stringify(cachedParts) === JSON.stringify(parts)) { return cachedParts; } arrayCache.put(jsonArr,parts); return parts; }; });