我有一个ng-repeat
,我在其中运行ng-if
,其方法是检查两组数据之间的某些参数是否匹配。如果匹配,则会使用当前匹配更新$scope
,我可以使用该匹配输出模板:
<div ng-repeat="repeatedItem in repeatedItems">
<a href="" ng-if="!matchData(repeatedItem.item1, repeatedItem.item2)">
<img ng-src="{{ matchedItem.falseImageUrl }}" />
</a>
<a href="" ng-if="matchData(repeatedItem.item1, repeatedItem.item2)" ng-click="open(matchedItem.id)">
<img ng-src="{{ matchedItem.imageUrl }}" />
<time>{{ matchedItem.date }}</time>
<div class="button-wrapper">
<button class="btn">{{ matchedItem.text }}</button>
</div>
</a>
</div>
除非repeatedItems
中的某个项与另一个数据集匹配,否则需要显示repeatedItem
以外的所有内容,在这种情况下,您将显示matchedItem
。
除了ng-click="open(matchedItem.id)
位之外,一切正常。由于matchedItem.id
未包含在模板标记中,ng-click
始终调用matchesItem的最新迭代,因此对于除最后一个重复元素之外的所有元素,它都会打开错误的链接。
我的Angular缺乏经验的头脑中最明显的解决方案是做ng-click="open( {{ matchedItem.id }} )
之类的事情,但这会引发错误。我的下一个想法是类似ng-click="open( {0} ):{{ matchedItem.id }}
- printf
类型的解决方案,但我还没有找到任何内置的Angular解决方案。我还考虑过将{{ matchedItem.id }}
隐藏在某个属性(data-id="{{ matchedItem.id }}"
?)中,但我不确定如何在方法中调用该属性。
我可能(很可能?)我还没有“在Angular中思考”,而我完全是错误的。或者也许有一个我不知道的指令?
以下是方法:
$scope.matchData = function(item1, item2) {
var isItAMatch = false;
for (i=0; i<$scope.repeatedItems.length; i++) {
itemAToMatch = $scope.repeatedItems[i].itemA;
itemBToMatch = $scope.repeatedItems[i].itemB;
if (itemAToMatch == item1 && itemBToMatch == item2) {
isItAMatch = true;
$scope.matchedItem = $scope.repeatedItems[i];
break;
}
}
return isItAMatch;
}