代码之家  ›  专栏  ›  技术社区  ›  Sherin Green

如何使用angular js选中db中存储的现有逗号seaprated值的复选框值

  •  0
  • Sherin Green  · 技术社区  · 6 年前

    我将便利设施复选框选项显示为json数组的ng repeat,并以逗号分隔的id(如“1,3,7”)作为单个字符串存储到数据库中,但是当我需要编辑便利设施复选框时,我无法将现有选项显示为checked,因为我将db中的现有值显示为1,3,7作为单个字符串我将如何使用ng repeat中的选项检查此字符串?

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
    <script>
    
    var app = angular.module('myApp', []);
    app.controller('myCtrl', function($scope) {
        $scope.amenities=[{id:1,value:"Wifi"},
                      {id:2,value:"AC"},
                      {id:3,value:"Creditcard"},
                      {id:4,value:"24x7"},
                      {id:5,value:"Parking"},
                      {id:6,value:"Free delivery"},
                      {id:7,value:"No Smoking"}
                     ];
    
         //For example  assume that this is existing amenities from database
         $scope.existamenities="1,3,7";            
    });
    
    </script>
    
    <htmL>
    <div ng-app="myApp" ng-controller="myCtrl">
    
    <div ng-repeat="amn in amenities">	
      <label>{{amn.value}}
    <input type="checkbox"  name="amenities"   ng-value="amn.id">
    </label>
    </div>
    
    
    
    </div>
    
    </htmL>
    2 回复  |  直到 6 年前
        1
  •  1
  •   Aleksey Solovey    6 年前

    我相信要检查它们你需要设置 ng-model 对或错。只需创建另一个数组并相应地填充它。

    您可以选择在现有数组中附加新的属性以保存true/false值,或者创建一个从原始数组映射的新数组。然后简单地切换默认值 false 值到 true 如果 他们的id列出来了,你可以通过拆分字符串得到。

    下面是一个小演示:

    var app = angular.module('myApp', []);
    app.controller('myCtrl', function($scope) {
      $scope.amenities = [
        {id:1,value:"Wifi"},
        {id:2,value:"AC"},
        {id:3,value:"Creditcard"},
        {id:4,value:"24x7"},
        {id:5,value:"Parking"},
        {id:6,value:"Free delivery"},
        {id:7,value:"No Smoking"}
      ];
    
      //For example  assume that this is existing amenities from database
      $scope.existamenities = "1,3,7";
    
      var a = $scope.existamenities.split(",").map(x => Number(x))
      var b = $scope.amenities.map((x) => {
        return {
          "id": x.id,
          "val": false
        }
      })
      for (var i = 0; i < b.length; i++) {
        for (var j = 0; j < a.length; j++) {
          if (b[i].id == a[j]) {
            b[i].val = true
          }
        }
      }
      $scope.model = b;
    });
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
    <div ng-app="myApp" ng-controller="myCtrl">
    
      <div ng-repeat="amn in amenities">
        <label>{{amn.value}}
    <input type="checkbox"  name="amenities"  ng-model="model[$index].val" ng-value="amn.id">
    </label>
      </div>
        2
  •  1
  •   Protozoid    6 年前

    你需要使用 ng-model 在每个复选框上,以便能够控制是否选中它们…并且能够在稍后的时间点判断哪些是检查过的,例如表单提交。

    为了做到这一点:

    • 便利设施对象应具有 checked 财产
    • 中的复选框 ng-repeat 应该绑定 NG模型 选中的 财产

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
    <script>
    
    var app = angular.module('myApp', []);
    app.controller('myCtrl', function($scope) {
        $scope.amenities=[{id:1,value:"Wifi", checked: false},
                      {id:2,value:"AC", checked: false},
                      {id:3,value:"Creditcard", checked: false},
                      {id:4,value:"24x7", checked: false},
                      {id:5,value:"Parking", checked: false},
                      {id:6,value:"Free delivery", checked: false},
                      {id:7,value:"No Smoking", checked: false}
                     ];
    
         //For example  assume that this is existing amenities from database
         $scope.existamenities="1,3,7";            
    
         var arrayOfExistingAmenities = $scope.existamenities.split(",");
         arrayOfExistingAmenities.forEach(function(existingAmenity) {
            $scope.amenities.forEach(function(amenity) {
                if (amenity.id == parseInt(existingAmenity)) {
                    amenity.checked = true;
                }
            });
         });
    
    
    });
    
    </script>
    
    <htmL>
    <div ng-app="myApp" ng-controller="myCtrl">
    
    <div ng-repeat="amn in amenities">	
      <label>{{amn.value}}
    <input type="checkbox"  name="amenities" ng-model="amn.checked"  ng-value="amn.id">
    </label>
    </div>
    
    
    
    </div>
    
    </htmL>