AngularJS多选复选框以逗号分隔的String保存

时间:2015-06-22 08:46:50

标签: javascript angularjs multi-select

我想从angularJS中的选定复选框项中获取逗号分隔的字符串。同时,当从数据库中恢复逗号分隔的字符串时,我希望相应地检查复选框。

<div class="col-md-5">
    <input type="checkbox" ng-model="Drawings.CarMDrawings" ng-change="Update(Drawings)"> Car
    <br />

    <input type="checkbox" ng-model="Drawings.SignalMDrawings" ng-change="Update(Drawings)"> Signal
    <br />

    <input type="checkbox" ng-model="Drawings.DoorMDawings" ng-change="Update(Drawings)"> Door
    <br />

  </div>

我以非常简单的方式解决了问题是Plunker http://plnkr.co/edit/YYd5bN5Chmyjt6gSH1Bw?p=preview

 $scope.Update = function(Drawings) {
    var str = "";
    if (Drawings.CarMDrawings) {
      str = "Car";
    }
    if (Drawings.SignalMDrawings) {
      str = str + ",Signal";
    }
    if (Drawings.DoorMDawings) {
      str = str + ",Door";
    }
    if (str.charAt(0) === ',') {
      str = str.substr(1);
    }
    $scope.data = str;
  }

  $scope.revUpdate = function(data) {
    var str = data;
    $scope.Drawings = {};
    if (str.indexOf('Car') != -1) {

      $scope.Drawings.CarMDrawings = true;
    }
    if (str.indexOf('Signal') != -1) {

      $scope.Drawings.SignalMDrawings = true;
    }
    if (str.indexOf('Door') != -1) {

      $scope.Drawings.DoorMDawings = true;
    }

}

但是当我有许多相似的项目时它没有帮助。任何人都可以帮我构建一个指令或扩展,以便我可以经常重用它们。 附:我不想要对象数组,而是简单的逗号分隔字符串项。

1 个答案:

答案 0 :(得分:0)

如果您使用&#39; indexOf&#39;,您将获得许多垃圾项目,其中包含您要查找的文字。

所以我认为这是获得更精确价值的最近方式。

if (new RegExp("\\b"+"Car"+"\\b").test(str)) {
    $scope.Drawings.CarMDrawings = true;
}

var str="test ,Car ,test";  //true
var str="test, Car, test";  //true
var str="test Cartest";     //false
var str="testCar test";     //false

也许这是非常晚的答案,但我希望这对你的意图是正确的,

对其他看过这个的人有帮助。 :)