有没有办法通过方法传递带花括号模板标签的变量?

时间:2014-10-27 16:52:23

标签: javascript angularjs

我有一个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;
}

0 个答案:

没有答案