How do I bind to list of checkbox values with AngularJS?

前端 未结 29 2690
天涯浪人
天涯浪人 2020-11-22 05:20

I have a few checkboxes:





        
29条回答
  •  独厮守ぢ
    2020-11-22 06:19

    Another simple directive could be like:

    var appModule = angular.module("appModule", []);
    
    appModule.directive("checkList", [function () {
    return {
        restrict: "A",
        scope: {
            selectedItemsArray: "=",
            value: "@"
        },
        link: function (scope, elem) {
            scope.$watchCollection("selectedItemsArray", function (newValue) {
                if (_.contains(newValue, scope.value)) {
                    elem.prop("checked", true);
                } else {
                    elem.prop("checked", false);
                }
            });
            if (_.contains(scope.selectedItemsArray, scope.value)) {
                elem.prop("checked", true);
            }
            elem.on("change", function () {
                if (elem.prop("checked")) {
                    if (!_.contains(scope.selectedItemsArray, scope.value)) {
                        scope.$apply(
                            function () {
                                scope.selectedItemsArray.push(scope.value);
                            }
                        );
                    }
                } else {
                    if (_.contains(scope.selectedItemsArray, scope.value)) {
                        var index = scope.selectedItemsArray.indexOf(scope.value);
                        scope.$apply(
                            function () {
                                scope.selectedItemsArray.splice(index, 1);
                            });
                    }
                }
                console.log(scope.selectedItemsArray);
            });
        }
    };
    }]);
    

    The controller:

    appModule.controller("sampleController", ["$scope",
      function ($scope) {
        //#region "Scope Members"
        $scope.sourceArray = [{ id: 1, text: "val1" }, { id: 2, text: "val2" }];
        $scope.selectedItems = ["1"];
        //#endregion
        $scope.selectAll = function () {
          $scope.selectedItems = ["1", "2"];
      };
        $scope.unCheckAll = function () {
          $scope.selectedItems = [];
        };
    }]);
    

    And the HTML:

    I'm also including a Plunker: http://plnkr.co/edit/XnFtyij4ed6RyFwnFN6V?p=preview

提交回复
热议问题