跟踪复选框状态并为ng-model

时间:2018-06-02 03:51:57

标签: javascript angularjs user-interface checkbox

我有一个情况。我有两个复选框。

<span class="flex-3"><input  type="checkbox" ng-model="station.val.fingerprint_scanner" ng-click="updateAccessMode(station.key,'fingerprint_scanner', station.config_group)" /></span>
<span class="flex-3"><input type="checkbox" ng-model="station.val.id_card" ng-click="updateAccessMode(station.key,'card_scanner', station.config_group)" /></span>

station.val.fingerprint_scannerstation.val.id_card是我从数据库中获取的值。根据{{​​1}}和station.val.fingerprint_scanner,复选框将被选中并取消选中。

现在我已经分配了station.val.id_card。如果用户进行了任何更改,我如何获得ng-modelstation.val.fingerprint_scanner的值。视目前情况而定。我直接调用了函数station.val.id_card并分配了一个像这样的静态值

updateAccessMode()

所以根据这个,无论如何点击一个复选框,id_card和fingerprint_scanner总是会成立。基本上我在这里有硬编码值。现在我希望这些值为true或false,具体取决于复选框状态。现在我已经使用了reqdata.access_mode = JSON.stringify({ "id_card" : true, "fingerprint_scanner" : true }) 。所以我很困惑,我将如何跟踪复选框状态。

我能想到的一个可能的解决方案是使用ng-model绑定多个值。但我认为不推荐。或者还有其他最佳解决方案吗?

注意:此复选框位于ng-model。我不想更改ng-repeat

2 个答案:

答案 0 :(得分:2)

使用ng-checked="station.val.fingerprint_scanner"代替ng-model="station.val.fingerprint_scanner",并使用ng-click更新所需的值,甚至将其分配给ng-model="station.key.fingerprint_scanner"

很难提供准确的解决方案,因为您尚未共享ng-repeat代码以及updateAccessMode()函数的作用

答案 1 :(得分:0)

好的所以我想出了这个解决方案。我开始知道我不需要双向数据绑定复选框,所以我删除了ng-model。对此误解感到抱歉。并使用@Karthikeyan提到的ng-checked,+1。并根据其索引更新了复选框状态。 这是html

<span class="flex-3"><input  type="checkbox" ng-checked="station.val.fingerprint_scanner" ng-click="updateAccessMode(station.key,'fingerprint_scanner', station.config_group, $index)" /></span>
<span class="flex-3"><input type="checkbox" ng-checked="station.val.id_card" ng-click="updateAccessMode(station.key,'card_scanner', station.config_group, $index)" /></span>

和那个

的JS
if(mode == "fingerprint_scanner"){
            reqdata.access_mode = JSON.stringify({
                        "id_card" : id_card_data,
                        "fingerprint_scanner" : !fingerprint_data
            })
}else{
            reqdata.access_mode = JSON.stringify({
                        "id_card" : !id_card_data,
                        "fingerprint_scanner" : fingerprint_data
            })
}