比较两个数组与 ng 重复

Comparing Two Arrays with ng-repeat

本文关键字:数组 ng 重复 两个 比较      更新时间:2023-09-26

我正在尝试使用 Array1 中的 ng-repeat 创建多个复选框,我想将"checked"属性(使用 ng-checked)应用于某些复选框,具体取决于 Array2 中是否有匹配项。

这里我们在控制器中有 array1:

$scope.possibleConditions = ["condition1", "condition2", "condition3", "condition4"];

然后 array2 来自同一个控制器,但通过 JSON API。

{
    "treated" : false,
    "data" : [{
        "conditions" : ["condition1", "condition2"],
    }]
}

这是我目前在模板中的ng重复设置:

<p ng-repeat="condition in possibleConditions">                     
    <input type="checkbox" id="{{condition}}" />
    <label for="{{condition}}">
        {{condition}}
    </label>            
</p>

希望将属性checked应用于输入,例如,如果在 Array2 的"条件"中找到 Array1 中的"条件 1"。


我尝试过:

1:我尝试在我的控制器之后使用过滤器(我在堆栈溢出上找到):

.filter('customArray', function($filter){
return function(list, arrayFilter, element){
    if(arrayFilter){
        return $filter("filter")(list, function(listItem){
            return arrayFilter.indexOf(listItem[element]) != -1;
        });
    }
};

NG重复略有修改:

<p ng-repeat="conditions in possibleConditions | customArray:profileData.data:'conditions' ">

但这没有用。

2:我尝试在ng-repeat中使用另一个ng-repeat,然后根据第一个匹配项进行检查。

例:

<p ng-repeat="conditions in possibleConditions">                    
    <input ng-repeat="condition in profileData.data[0].conditions | filter{condition == conditions}" type="checkbox" id="{{condition}}" />
    <label ng-repeat="condition in profileData.data[0].conditions | filter{condition == conditions}"  for="{{condition}}">
        {{condition}}
    </label>            
</p>

希望有人可以帮助/指出一些指导。谢谢。

你在这里真的不需要过滤器,简单的ngChecked 指令可以工作:

<p ng-repeat="condition in possibleConditions">
  <input type="checkbox" id="{{condition}}" 
         ng-checked="response.data[0].conditions.indexOf(condition) > -1" />
  <label for="{{condition}}">
    {{condition}}
  </label>
</p>

演示:http://plnkr.co/edit/fDn0niCCljo5wChzYiwa?p=info

其中response是来自 API 的数据。