【问题标题】:How can I auto select the existing data in a Angular Material Checkbox?如何在 Angular 材质复选框中自动选择现有数据?
【发布时间】:2017-01-06 23:52:06
【问题描述】:

如果模型中已经存在复选框,我想自动选择它

我尝试了以下代码

控制器

$scope.model = {
  items: [{"key":1, "value": "One"},{"key":2, "value": "Two"},{"key":3, 
  "value": "Three"},{"key":4, "value": "Four"},{"key":5, "value": "Five"}]
};
   $scope.selected = [{"key":2, "value": "Two"},{"key":5, "value": "Five"}];
   $scope.toggle = function(item, list) {
    var idx = list.indexOf(item);
    if (idx > -1) {
        list.splice(idx, 1);
    } else {
        list.push(item);
    }
};

$scope.exists = function(item, list) {
    return list.indexOf(item) > -1;
};

HTML

<div flex="25" ng-repeat="item model.items">
    <md-checkbox  ng-checked="exists(item, selected)" 
        ng-click="toggle(item, selected)">
    {{ item.value }} 
    </md-checkbox>
</div>

但默认情况下未选中 Key '2' 和 '5' 的复选框。

如果我替换下面的代码,

$scope.exists = function (item, list) {
 for (var i = 0; i < list.length; i++) {
        if (list[i].key === item.key) {
            return true;
        }
    }
    return false;
};

它在页面加载时选择 2 和 5,但不能同时取消选中。其他 1,3 和 4 按预期工作。

【问题讨论】:

    标签: javascript angularjs checkbox angular-material


    【解决方案1】:

    想出一个办法

    <div flex="25" ng-repeat="item model.items">
        <md-checkbox  ng-model="item.selected" 
            ng-click="toggle(item, selected)">
        {{ item.value }} 
        </md-checkbox>
    </div>
    

    所以使用 ng-model 并设置默认值

    $scope.model = {
      items: [{"key":1, "value": "One"},{"key":2, "value": "Two", selected: true},{"key":3, 
      "value": "Three"},{"key":4, "value": "Four"},{"key":5, "value": "Five", selected: true}]
    };
    

    稍后获取您只需要使用的选定项目

    $scope.model.items.filter(function(item){return item.selected});
    

    【讨论】:

    • 感谢 Tratto....实际上我会从服务器获取“项目”的数据。是否需要通过添加“Selected:true”来修改它?。
    • 假设如果我按照你的建议添加“selected”,当我尝试保存数据时,我的 $scope.model.items 看起来像 [{"key":2, "value": "Two ", selected: true},{"key":5, "value": "Five", selected: true}] ?
    • 如果是,那么当我尝试在服务器端保存时它会失败
    • 嗨,Prince,在原始帖子中,您没有提到正在从服务器接收数据,所以是的,它不起作用。我注意到您正在尝试在对象数组上使用 indexOf,尝试仅存储“键”字段值​​并验证它ng-click="toggle(item.key, selected)"ng-checked="exists(item.key, selected)",因此默认选择数组看起来像 $scope.selected=[2,5] 您原来的方法由于对象身份而不起作用,因此 {} == {} 返回 'false'
    • 如果你想使用对象而不是键来简化客户端和服务器之间的通信,你可以使用这个jsfiddle.net/u25crjj1/2
    猜你喜欢
    • 2019-06-30
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 2020-11-13
    相关资源
    最近更新 更多