【问题标题】:Set ng-checked based on an array [duplicate]根据数组设置 ng-checked [重复]
【发布时间】:2018-06-18 13:29:40
【问题描述】:

我有一个select 下拉菜单。在下拉列表中选择每个值后,将使用ng-repeat 创建复选框。下拉列表中的所有值都应该被选中,并且必须选中相应的复选框并将其存储在数组中。

每当复选框更改时,我都会将其添加或从数组中删除。当我更改下拉列表时,检查先前下拉列表的复选框消失了。

如何根据存储检查值的数组来检查它们。

<div ng-repeat="flat in flatsArray" class="row" style="width:90%;">
       <div class="col-md-2">
          <input 
               type="checkbox" ng-true-value="{{flat.flat_id}}"
               ng-false-value="'-1'" 
               //tried this but selctedFlats is an object
               ng-checked="userEventData.selectedFlats.indexOf(sFlats[$index])"  `userEventData.selectedFlats` is an object
              ng-change="checkChanged(sFlats[$index], flat)" 
              ng-model="sFlats[$index]" />
       </div>
       <div class="col-md-10"><label for="{{flat.flat_no}}">{{flat.flat_no}}</label></div>
    </div>

$scope.userEventData.selectedFlats 是检查值的数组。

我本可以完成 ng-checked="userEventData.selectedFlats.indexOf(sFlats[$index])"selectedFlats 包含对象。我想检查对象中的值

【问题讨论】:

  • 精选公寓的定义是什么?它是一个对象,而不是一个数组?
  • @Fallenreaper 这是一个对象数组。
  • 那么 indexOf 返回一个 INDEX, int, >= -1,所以你可能想稍微改变一下你的表达式?它不想要一个对象,它想要一个布尔值。我觉得这比它应该的更难。为什么不在 flatsArray 对象中定义一个选中的属性,然后说:ng-checked="flat.checked" 它会创建更少的迭代,更简洁的代码
  • @Fallenreaper 嗯,好的。写为答案,我会接受
  • 当文档告诉你不要这样做时,你为什么还要使用 ng-checkedng-model

标签: javascript angularjs


【解决方案1】:

NG-CHECKED 正在寻找返回状态的表达式。 indexOf 将返回一个数值 >= -1。虽然这样做会产生更多的处理,因为它会一遍又一遍地运行函数来寻找变化。

我会推荐类似的方法:当您获取公寓数据时,将选中的属性放在那里,然后将其分配给需要的属性。它将创建更清晰的代码,并且您有 1 个对象要操作。您可以随时根据需要对其进行解析。

ng-checked="flat.checked"

看起来更干净,并且通过循环数组不断寻找变化来创建更少的处理。

【讨论】:

  • 嘿,我正在尝试你所说的......当我更改下拉值时,由于某种原因,某些选定复选框上的 ng-change 未被调用。你能想出一个理由吗?
猜你喜欢
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 2011-03-08
  • 1970-01-01
  • 2013-12-14
相关资源
最近更新 更多