Javascript 在angularjs树结构中将选中的复选框存储到数组中

Javascript 在angularjs树结构中将选中的复选框存储到数组中,javascript,angularjs,checkbox,tree,Javascript,Angularjs,Checkbox,Tree,目前,我可以使用复选框在树结构中显示具有父子关系的项。现在我需要将选中的复选框存储到一个数组中,以便通过ajax将数据提交到服务器 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script> <script> var app, list; list = [ {

目前,我可以使用复选框在树结构中显示具有父子关系的项。现在我需要将选中的复选框存储到一个数组中,以便通过ajax将数据提交到服务器

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
    <script>
        var app, list;
        list = [
            {
                name: 'Developer',
                opened: true,
                children: [
                    {
                        name: 'Front-End',id:1,
                        children: [
                            {
                                name: 'Jack',id:2,
                                title: 'Leader'
                            },
                            {
                                name: 'John',id:3,
                                title: 'Senior F2E'
                            },
                            {
                                name: 'Jason',id:4,
                                title: 'Junior F2E'
                            }
                        ]
                    },
                    {
                        name: 'Back-End',id:5,
                        children: [
                            {
                                name: 'Mary',id:6,
                                title: 'Leader'
                            },
                            {
                                name: 'Gary',id:7,
                                title: 'Intern'
                            }
                        ]
                    }
                ]
            },
            {
                name: 'Design',id:8,
                children: [{
                    name: 'Freeman',id:9,
                    title: 'Designer'
                }]
            },
            {
                name: 'S&S',id:10,
                children: [{
                    name: 'Nikky',id:11,
                    title: 'Robot'
                }]
            }
        ];
        app = angular.module('testApp', []).controller('treeTable', [
            '$scope',
            '$filter',
            function ($scope, $filter) {
                $scope.list = list;
                //$scope.item.selected={};
                $scope.initCheckbox = function (item, parentItem) {
                    return item.selected = parentItem && parentItem.selected || item.selected || false;
                };
                $scope.toggleCheckbox = function (item, parentScope) {
                    if (item.children != null) {
                        $scope.$broadcast('changeChildren', item);
                    }
                    if (parentScope.item != null) {
                        return $scope.$emit('changeParent', parentScope);
                    }
                };
                $scope.$on('changeChildren', function (event, parentItem) {
                    var child, i, len, ref, results;
                    ref = parentItem.children;
                    results = [];
                    for (i = 0, len = ref.length; i < len; i++) {
                        child = ref[i];
                        child.selected = parentItem.selected;
                        if (child.children != null) {
                            results.push($scope.$broadcast('changeChildren', child));
                        } else {
                            results.push(void 0);
                        }
                    }
                    return results;
                });
                return $scope.$on('changeParent', function (event, parentScope) {
                    var children;
                    children = parentScope.item.children;
                    parentScope.item.selected = $filter('selected')(children).length === children.length;
                    parentScope = parentScope.$parent.$parent;
                    if (parentScope.item != null) {
                        return $scope.$broadcast('changeParent', parentScope);
                    }
                });
            }
        ]);
        app.filter('selected', [
            '$filter',
            function ($filter) {
                return function (files) {
                    return $filter('filter')(files, { selected: true });
                };
            }
        ]);
    </script>
</head>
<body>
    <div class="wrapper" ng-app="testApp" ng-controller="treeTable">
        <table class="table-nested">
            <tbody  ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-repeat="item in list"></tbody>
        </table>
        <script id="table_tree.html" type="text/ng-template">
            <tr ng-class="{parent: item.children}" ng-init="parentScope = $parent.$parent; initCheckbox(item, parentScope.item)">
                <td class="cell-name">
                    <div class="indent" ng-click="item.opened = !item.opened"></div>
                    <input ng-change="toggleCheckbox(item, parentScope)" ng-model="item.selected" type="checkbox"  />
                    {{item.name}}
                </td>
            </tr>
            <tr class="children" ng-if="item.children && item.children.length > 0">
                <td colspan="4">
                    <table class="table-child">
                        <tbody ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-init="level = level + 1" ng-repeat="item in item.children"></tbody>
                    </table>
                </td>
            </tr>
        </script>
        {{item.selected | json}}
    </div>
</body>
我对angularjs是新手。我尝试使用
ng model
value打印。但它不起作用

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
    <script>
        var app, list;
        list = [
            {
                name: 'Developer',
                opened: true,
                children: [
                    {
                        name: 'Front-End',id:1,
                        children: [
                            {
                                name: 'Jack',id:2,
                                title: 'Leader'
                            },
                            {
                                name: 'John',id:3,
                                title: 'Senior F2E'
                            },
                            {
                                name: 'Jason',id:4,
                                title: 'Junior F2E'
                            }
                        ]
                    },
                    {
                        name: 'Back-End',id:5,
                        children: [
                            {
                                name: 'Mary',id:6,
                                title: 'Leader'
                            },
                            {
                                name: 'Gary',id:7,
                                title: 'Intern'
                            }
                        ]
                    }
                ]
            },
            {
                name: 'Design',id:8,
                children: [{
                    name: 'Freeman',id:9,
                    title: 'Designer'
                }]
            },
            {
                name: 'S&S',id:10,
                children: [{
                    name: 'Nikky',id:11,
                    title: 'Robot'
                }]
            }
        ];
        app = angular.module('testApp', []).controller('treeTable', [
            '$scope',
            '$filter',
            function ($scope, $filter) {
                $scope.list = list;
                //$scope.item.selected={};
                $scope.initCheckbox = function (item, parentItem) {
                    return item.selected = parentItem && parentItem.selected || item.selected || false;
                };
                $scope.toggleCheckbox = function (item, parentScope) {
                    if (item.children != null) {
                        $scope.$broadcast('changeChildren', item);
                    }
                    if (parentScope.item != null) {
                        return $scope.$emit('changeParent', parentScope);
                    }
                };
                $scope.$on('changeChildren', function (event, parentItem) {
                    var child, i, len, ref, results;
                    ref = parentItem.children;
                    results = [];
                    for (i = 0, len = ref.length; i < len; i++) {
                        child = ref[i];
                        child.selected = parentItem.selected;
                        if (child.children != null) {
                            results.push($scope.$broadcast('changeChildren', child));
                        } else {
                            results.push(void 0);
                        }
                    }
                    return results;
                });
                return $scope.$on('changeParent', function (event, parentScope) {
                    var children;
                    children = parentScope.item.children;
                    parentScope.item.selected = $filter('selected')(children).length === children.length;
                    parentScope = parentScope.$parent.$parent;
                    if (parentScope.item != null) {
                        return $scope.$broadcast('changeParent', parentScope);
                    }
                });
            }
        ]);
        app.filter('selected', [
            '$filter',
            function ($filter) {
                return function (files) {
                    return $filter('filter')(files, { selected: true });
                };
            }
        ]);
    </script>
</head>
<body>
    <div class="wrapper" ng-app="testApp" ng-controller="treeTable">
        <table class="table-nested">
            <tbody  ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-repeat="item in list"></tbody>
        </table>
        <script id="table_tree.html" type="text/ng-template">
            <tr ng-class="{parent: item.children}" ng-init="parentScope = $parent.$parent; initCheckbox(item, parentScope.item)">
                <td class="cell-name">
                    <div class="indent" ng-click="item.opened = !item.opened"></div>
                    <input ng-change="toggleCheckbox(item, parentScope)" ng-model="item.selected" type="checkbox"  />
                    {{item.name}}
                </td>
            </tr>
            <tr class="children" ng-if="item.children && item.children.length > 0">
                <td colspan="4">
                    <table class="table-child">
                        <tbody ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-init="level = level + 1" ng-repeat="item in item.children"></tbody>
                    </table>
                </td>
            </tr>
        </script>
        {{item.selected | json}}
    </div>
</body>
您能帮助我如何将选中的复选框存储到数组中吗

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
    <script>
        var app, list;
        list = [
            {
                name: 'Developer',
                opened: true,
                children: [
                    {
                        name: 'Front-End',id:1,
                        children: [
                            {
                                name: 'Jack',id:2,
                                title: 'Leader'
                            },
                            {
                                name: 'John',id:3,
                                title: 'Senior F2E'
                            },
                            {
                                name: 'Jason',id:4,
                                title: 'Junior F2E'
                            }
                        ]
                    },
                    {
                        name: 'Back-End',id:5,
                        children: [
                            {
                                name: 'Mary',id:6,
                                title: 'Leader'
                            },
                            {
                                name: 'Gary',id:7,
                                title: 'Intern'
                            }
                        ]
                    }
                ]
            },
            {
                name: 'Design',id:8,
                children: [{
                    name: 'Freeman',id:9,
                    title: 'Designer'
                }]
            },
            {
                name: 'S&S',id:10,
                children: [{
                    name: 'Nikky',id:11,
                    title: 'Robot'
                }]
            }
        ];
        app = angular.module('testApp', []).controller('treeTable', [
            '$scope',
            '$filter',
            function ($scope, $filter) {
                $scope.list = list;
                //$scope.item.selected={};
                $scope.initCheckbox = function (item, parentItem) {
                    return item.selected = parentItem && parentItem.selected || item.selected || false;
                };
                $scope.toggleCheckbox = function (item, parentScope) {
                    if (item.children != null) {
                        $scope.$broadcast('changeChildren', item);
                    }
                    if (parentScope.item != null) {
                        return $scope.$emit('changeParent', parentScope);
                    }
                };
                $scope.$on('changeChildren', function (event, parentItem) {
                    var child, i, len, ref, results;
                    ref = parentItem.children;
                    results = [];
                    for (i = 0, len = ref.length; i < len; i++) {
                        child = ref[i];
                        child.selected = parentItem.selected;
                        if (child.children != null) {
                            results.push($scope.$broadcast('changeChildren', child));
                        } else {
                            results.push(void 0);
                        }
                    }
                    return results;
                });
                return $scope.$on('changeParent', function (event, parentScope) {
                    var children;
                    children = parentScope.item.children;
                    parentScope.item.selected = $filter('selected')(children).length === children.length;
                    parentScope = parentScope.$parent.$parent;
                    if (parentScope.item != null) {
                        return $scope.$broadcast('changeParent', parentScope);
                    }
                });
            }
        ]);
        app.filter('selected', [
            '$filter',
            function ($filter) {
                return function (files) {
                    return $filter('filter')(files, { selected: true });
                };
            }
        ]);
    </script>
</head>
<body>
    <div class="wrapper" ng-app="testApp" ng-controller="treeTable">
        <table class="table-nested">
            <tbody  ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-repeat="item in list"></tbody>
        </table>
        <script id="table_tree.html" type="text/ng-template">
            <tr ng-class="{parent: item.children}" ng-init="parentScope = $parent.$parent; initCheckbox(item, parentScope.item)">
                <td class="cell-name">
                    <div class="indent" ng-click="item.opened = !item.opened"></div>
                    <input ng-change="toggleCheckbox(item, parentScope)" ng-model="item.selected" type="checkbox"  />
                    {{item.name}}
                </td>
            </tr>
            <tr class="children" ng-if="item.children && item.children.length > 0">
                <td colspan="4">
                    <table class="table-child">
                        <tbody ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-init="level = level + 1" ng-repeat="item in item.children"></tbody>
                    </table>
                </td>
            </tr>
        </script>
        {{item.selected | json}}
    </div>
</body>
下面是代码。

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
    <script>
        var app, list;
        list = [
            {
                name: 'Developer',
                opened: true,
                children: [
                    {
                        name: 'Front-End',id:1,
                        children: [
                            {
                                name: 'Jack',id:2,
                                title: 'Leader'
                            },
                            {
                                name: 'John',id:3,
                                title: 'Senior F2E'
                            },
                            {
                                name: 'Jason',id:4,
                                title: 'Junior F2E'
                            }
                        ]
                    },
                    {
                        name: 'Back-End',id:5,
                        children: [
                            {
                                name: 'Mary',id:6,
                                title: 'Leader'
                            },
                            {
                                name: 'Gary',id:7,
                                title: 'Intern'
                            }
                        ]
                    }
                ]
            },
            {
                name: 'Design',id:8,
                children: [{
                    name: 'Freeman',id:9,
                    title: 'Designer'
                }]
            },
            {
                name: 'S&S',id:10,
                children: [{
                    name: 'Nikky',id:11,
                    title: 'Robot'
                }]
            }
        ];
        app = angular.module('testApp', []).controller('treeTable', [
            '$scope',
            '$filter',
            function ($scope, $filter) {
                $scope.list = list;
                //$scope.item.selected={};
                $scope.initCheckbox = function (item, parentItem) {
                    return item.selected = parentItem && parentItem.selected || item.selected || false;
                };
                $scope.toggleCheckbox = function (item, parentScope) {
                    if (item.children != null) {
                        $scope.$broadcast('changeChildren', item);
                    }
                    if (parentScope.item != null) {
                        return $scope.$emit('changeParent', parentScope);
                    }
                };
                $scope.$on('changeChildren', function (event, parentItem) {
                    var child, i, len, ref, results;
                    ref = parentItem.children;
                    results = [];
                    for (i = 0, len = ref.length; i < len; i++) {
                        child = ref[i];
                        child.selected = parentItem.selected;
                        if (child.children != null) {
                            results.push($scope.$broadcast('changeChildren', child));
                        } else {
                            results.push(void 0);
                        }
                    }
                    return results;
                });
                return $scope.$on('changeParent', function (event, parentScope) {
                    var children;
                    children = parentScope.item.children;
                    parentScope.item.selected = $filter('selected')(children).length === children.length;
                    parentScope = parentScope.$parent.$parent;
                    if (parentScope.item != null) {
                        return $scope.$broadcast('changeParent', parentScope);
                    }
                });
            }
        ]);
        app.filter('selected', [
            '$filter',
            function ($filter) {
                return function (files) {
                    return $filter('filter')(files, { selected: true });
                };
            }
        ]);
    </script>
</head>
<body>
    <div class="wrapper" ng-app="testApp" ng-controller="treeTable">
        <table class="table-nested">
            <tbody  ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-repeat="item in list"></tbody>
        </table>
        <script id="table_tree.html" type="text/ng-template">
            <tr ng-class="{parent: item.children}" ng-init="parentScope = $parent.$parent; initCheckbox(item, parentScope.item)">
                <td class="cell-name">
                    <div class="indent" ng-click="item.opened = !item.opened"></div>
                    <input ng-change="toggleCheckbox(item, parentScope)" ng-model="item.selected" type="checkbox"  />
                    {{item.name}}
                </td>
            </tr>
            <tr class="children" ng-if="item.children && item.children.length > 0">
                <td colspan="4">
                    <table class="table-child">
                        <tbody ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-init="level = level + 1" ng-repeat="item in item.children"></tbody>
                    </table>
                </td>
            </tr>
        </script>
        {{item.selected | json}}
    </div>
</body>

var应用程序,列表;
列表=[
{
名称:“开发者”,
是的,
儿童:[
{
名称:“前端”,id:1,
儿童:[
{
姓名:“杰克”,身份证号码:2,
标题:“领导者”
},
{
姓名:“约翰”,身份证号码:3,
标题:“高级F2E”
},
{
姓名:“杰森”,身份证号码:4,
标题:“初级F2E”
}
]
},
{
名称:“后端”,id:5,
儿童:[
{
姓名:“玛丽”,身份证号码:6,
标题:“领导者”
},
{
姓名:“加里”,身份证号码:7,
标题:“实习生”
}
]
}
]
},
{
名称:“设计”,id:8,
儿童:[{
姓名:“弗里曼”,身份证号码:9,
标题:“设计师”
}]
},
{
姓名:“S&S”,识别号:10,
儿童:[{
姓名:“Nikky”,身份证号码:11,
标题:“机器人”
}]
}
];
app=angular.module('testApp',[])。controller('treeTable'[
“$scope”,
“$filter”,
函数($scope$filter){
$scope.list=列表;
//$scope.item.selected={};
$scope.initCheckbox=函数(项,父项){
return item.selected=parentItem&&parentItem.selected | | item.selected | | false;
};
$scope.toggleCheckbox=函数(项,父范围){
if(item.children!=null){
$scope.$broadcast('changeChildren',项目);
}
if(parentScope.item!=null){
返回$scope.$emit('changeParent',parentScope);
}
};
$scope.$on('changeChildren',函数(事件,父项){
变量child,i,len,ref,results;
ref=parentItem.children;
结果=[];
对于(i=0,len=ref.length;i

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
    <script>
        var app, list;
        list = [
            {
                name: 'Developer',
                opened: true,
                children: [
                    {
                        name: 'Front-End',id:1,
                        children: [
                            {
                                name: 'Jack',id:2,
                                title: 'Leader'
                            },
                            {
                                name: 'John',id:3,
                                title: 'Senior F2E'
                            },
                            {
                                name: 'Jason',id:4,
                                title: 'Junior F2E'
                            }
                        ]
                    },
                    {
                        name: 'Back-End',id:5,
                        children: [
                            {
                                name: 'Mary',id:6,
                                title: 'Leader'
                            },
                            {
                                name: 'Gary',id:7,
                                title: 'Intern'
                            }
                        ]
                    }
                ]
            },
            {
                name: 'Design',id:8,
                children: [{
                    name: 'Freeman',id:9,
                    title: 'Designer'
                }]
            },
            {
                name: 'S&S',id:10,
                children: [{
                    name: 'Nikky',id:11,
                    title: 'Robot'
                }]
            }
        ];
        app = angular.module('testApp', []).controller('treeTable', [
            '$scope',
            '$filter',
            function ($scope, $filter) {
                $scope.list = list;
                //$scope.item.selected={};
                $scope.initCheckbox = function (item, parentItem) {
                    return item.selected = parentItem && parentItem.selected || item.selected || false;
                };
                $scope.toggleCheckbox = function (item, parentScope) {
                    if (item.children != null) {
                        $scope.$broadcast('changeChildren', item);
                    }
                    if (parentScope.item != null) {
                        return $scope.$emit('changeParent', parentScope);
                    }
                };
                $scope.$on('changeChildren', function (event, parentItem) {
                    var child, i, len, ref, results;
                    ref = parentItem.children;
                    results = [];
                    for (i = 0, len = ref.length; i < len; i++) {
                        child = ref[i];
                        child.selected = parentItem.selected;
                        if (child.children != null) {
                            results.push($scope.$broadcast('changeChildren', child));
                        } else {
                            results.push(void 0);
                        }
                    }
                    return results;
                });
                return $scope.$on('changeParent', function (event, parentScope) {
                    var children;
                    children = parentScope.item.children;
                    parentScope.item.selected = $filter('selected')(children).length === children.length;
                    parentScope = parentScope.$parent.$parent;
                    if (parentScope.item != null) {
                        return $scope.$broadcast('changeParent', parentScope);
                    }
                });
            }
        ]);
        app.filter('selected', [
            '$filter',
            function ($filter) {
                return function (files) {
                    return $filter('filter')(files, { selected: true });
                };
            }
        ]);
    </script>
</head>
<body>
    <div class="wrapper" ng-app="testApp" ng-controller="treeTable">
        <table class="table-nested">
            <tbody  ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-repeat="item in list"></tbody>
        </table>
        <script id="table_tree.html" type="text/ng-template">
            <tr ng-class="{parent: item.children}" ng-init="parentScope = $parent.$parent; initCheckbox(item, parentScope.item)">
                <td class="cell-name">
                    <div class="indent" ng-click="item.opened = !item.opened"></div>
                    <input ng-change="toggleCheckbox(item, parentScope)" ng-model="item.selected" type="checkbox"  />
                    {{item.name}}
                </td>
            </tr>
            <tr class="children" ng-if="item.children && item.children.length > 0">
                <td colspan="4">
                    <table class="table-child">
                        <tbody ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-init="level = level + 1" ng-repeat="item in item.children"></tbody>
                    </table>
                </td>
            </tr>
        </script>
        {{item.selected | json}}
    </div>
</body>

也许你可以这样做:

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
    <script>
        var app, list;
        list = [
            {
                name: 'Developer',
                opened: true,
                children: [
                    {
                        name: 'Front-End',id:1,
                        children: [
                            {
                                name: 'Jack',id:2,
                                title: 'Leader'
                            },
                            {
                                name: 'John',id:3,
                                title: 'Senior F2E'
                            },
                            {
                                name: 'Jason',id:4,
                                title: 'Junior F2E'
                            }
                        ]
                    },
                    {
                        name: 'Back-End',id:5,
                        children: [
                            {
                                name: 'Mary',id:6,
                                title: 'Leader'
                            },
                            {
                                name: 'Gary',id:7,
                                title: 'Intern'
                            }
                        ]
                    }
                ]
            },
            {
                name: 'Design',id:8,
                children: [{
                    name: 'Freeman',id:9,
                    title: 'Designer'
                }]
            },
            {
                name: 'S&S',id:10,
                children: [{
                    name: 'Nikky',id:11,
                    title: 'Robot'
                }]
            }
        ];
        app = angular.module('testApp', []).controller('treeTable', [
            '$scope',
            '$filter',
            function ($scope, $filter) {
                $scope.list = list;
                //$scope.item.selected={};
                $scope.initCheckbox = function (item, parentItem) {
                    return item.selected = parentItem && parentItem.selected || item.selected || false;
                };
                $scope.toggleCheckbox = function (item, parentScope) {
                    if (item.children != null) {
                        $scope.$broadcast('changeChildren', item);
                    }
                    if (parentScope.item != null) {
                        return $scope.$emit('changeParent', parentScope);
                    }
                };
                $scope.$on('changeChildren', function (event, parentItem) {
                    var child, i, len, ref, results;
                    ref = parentItem.children;
                    results = [];
                    for (i = 0, len = ref.length; i < len; i++) {
                        child = ref[i];
                        child.selected = parentItem.selected;
                        if (child.children != null) {
                            results.push($scope.$broadcast('changeChildren', child));
                        } else {
                            results.push(void 0);
                        }
                    }
                    return results;
                });
                return $scope.$on('changeParent', function (event, parentScope) {
                    var children;
                    children = parentScope.item.children;
                    parentScope.item.selected = $filter('selected')(children).length === children.length;
                    parentScope = parentScope.$parent.$parent;
                    if (parentScope.item != null) {
                        return $scope.$broadcast('changeParent', parentScope);
                    }
                });
            }
        ]);
        app.filter('selected', [
            '$filter',
            function ($filter) {
                return function (files) {
                    return $filter('filter')(files, { selected: true });
                };
            }
        ]);
    </script>
</head>
<body>
    <div class="wrapper" ng-app="testApp" ng-controller="treeTable">
        <table class="table-nested">
            <tbody  ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-repeat="item in list"></tbody>
        </table>
        <script id="table_tree.html" type="text/ng-template">
            <tr ng-class="{parent: item.children}" ng-init="parentScope = $parent.$parent; initCheckbox(item, parentScope.item)">
                <td class="cell-name">
                    <div class="indent" ng-click="item.opened = !item.opened"></div>
                    <input ng-change="toggleCheckbox(item, parentScope)" ng-model="item.selected" type="checkbox"  />
                    {{item.name}}
                </td>
            </tr>
            <tr class="children" ng-if="item.children && item.children.length > 0">
                <td colspan="4">
                    <table class="table-child">
                        <tbody ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-init="level = level + 1" ng-repeat="item in item.children"></tbody>
                    </table>
                </td>
            </tr>
        </script>
        {{item.selected | json}}
    </div>
</body>
JS:

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
    <script>
        var app, list;
        list = [
            {
                name: 'Developer',
                opened: true,
                children: [
                    {
                        name: 'Front-End',id:1,
                        children: [
                            {
                                name: 'Jack',id:2,
                                title: 'Leader'
                            },
                            {
                                name: 'John',id:3,
                                title: 'Senior F2E'
                            },
                            {
                                name: 'Jason',id:4,
                                title: 'Junior F2E'
                            }
                        ]
                    },
                    {
                        name: 'Back-End',id:5,
                        children: [
                            {
                                name: 'Mary',id:6,
                                title: 'Leader'
                            },
                            {
                                name: 'Gary',id:7,
                                title: 'Intern'
                            }
                        ]
                    }
                ]
            },
            {
                name: 'Design',id:8,
                children: [{
                    name: 'Freeman',id:9,
                    title: 'Designer'
                }]
            },
            {
                name: 'S&S',id:10,
                children: [{
                    name: 'Nikky',id:11,
                    title: 'Robot'
                }]
            }
        ];
        app = angular.module('testApp', []).controller('treeTable', [
            '$scope',
            '$filter',
            function ($scope, $filter) {
                $scope.list = list;
                //$scope.item.selected={};
                $scope.initCheckbox = function (item, parentItem) {
                    return item.selected = parentItem && parentItem.selected || item.selected || false;
                };
                $scope.toggleCheckbox = function (item, parentScope) {
                    if (item.children != null) {
                        $scope.$broadcast('changeChildren', item);
                    }
                    if (parentScope.item != null) {
                        return $scope.$emit('changeParent', parentScope);
                    }
                };
                $scope.$on('changeChildren', function (event, parentItem) {
                    var child, i, len, ref, results;
                    ref = parentItem.children;
                    results = [];
                    for (i = 0, len = ref.length; i < len; i++) {
                        child = ref[i];
                        child.selected = parentItem.selected;
                        if (child.children != null) {
                            results.push($scope.$broadcast('changeChildren', child));
                        } else {
                            results.push(void 0);
                        }
                    }
                    return results;
                });
                return $scope.$on('changeParent', function (event, parentScope) {
                    var children;
                    children = parentScope.item.children;
                    parentScope.item.selected = $filter('selected')(children).length === children.length;
                    parentScope = parentScope.$parent.$parent;
                    if (parentScope.item != null) {
                        return $scope.$broadcast('changeParent', parentScope);
                    }
                });
            }
        ]);
        app.filter('selected', [
            '$filter',
            function ($filter) {
                return function (files) {
                    return $filter('filter')(files, { selected: true });
                };
            }
        ]);
    </script>
</head>
<body>
    <div class="wrapper" ng-app="testApp" ng-controller="treeTable">
        <table class="table-nested">
            <tbody  ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-repeat="item in list"></tbody>
        </table>
        <script id="table_tree.html" type="text/ng-template">
            <tr ng-class="{parent: item.children}" ng-init="parentScope = $parent.$parent; initCheckbox(item, parentScope.item)">
                <td class="cell-name">
                    <div class="indent" ng-click="item.opened = !item.opened"></div>
                    <input ng-change="toggleCheckbox(item, parentScope)" ng-model="item.selected" type="checkbox"  />
                    {{item.name}}
                </td>
            </tr>
            <tr class="children" ng-if="item.children && item.children.length > 0">
                <td colspan="4">
                    <table class="table-child">
                        <tbody ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-init="level = level + 1" ng-repeat="item in item.children"></tbody>
                    </table>
                </td>
            </tr>
        </script>
        {{item.selected | json}}
    </div>
</body>
        $scope.seleceds = {};
        $scope.initCheckbox = function (item, parentItem) {
            return $scope.seleceds[item.id] = parentItem && $scope.seleceds[parentItem.id] || $scope.seleceds[item.id] || false;
        };
        $scope.toggleCheckbox = function (item, parentScope) {
            if (item.children != null) {
                $scope.$broadcast('changeChildren', item);
            }
            if (parentScope.item != null) {
                return $scope.$emit('changeParent', parentScope);
            }
        };
        $scope.$on('changeChildren', function (event, parentItem) {
            var child, i, len, ref, results;
            ref = parentItem.children;
            results = [];
            for (i = 0, len = ref.length; i < len; i++) {
                child = ref[i];
                $scope.seleceds[child.id] = $scope.seleceds[parentItem.id];
                if (child.children != null) {
                    results.push($scope.$broadcast('changeChildren', child));
                } else {
                    results.push(void 0);
                }
            }
            return results;
        });
        return $scope.$on('changeParent', function (event, parentScope) {
            var children;
            children = parentScope.item.children;
            $scope.seleceds[parentScope.item.id] = $filter('selected')(children, $scope.seleceds).length === children.length;
            parentScope = parentScope.$parent.$parent;
            if (parentScope.item != null) {
                return $scope.$broadcast('changeParent', parentScope);
            }
        });
 <input ng-change="toggleCheckbox(item, parentScope)" ng-model="seleceds[item.id]" type="checkbox"/>
HTML:

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
    <script>
        var app, list;
        list = [
            {
                name: 'Developer',
                opened: true,
                children: [
                    {
                        name: 'Front-End',id:1,
                        children: [
                            {
                                name: 'Jack',id:2,
                                title: 'Leader'
                            },
                            {
                                name: 'John',id:3,
                                title: 'Senior F2E'
                            },
                            {
                                name: 'Jason',id:4,
                                title: 'Junior F2E'
                            }
                        ]
                    },
                    {
                        name: 'Back-End',id:5,
                        children: [
                            {
                                name: 'Mary',id:6,
                                title: 'Leader'
                            },
                            {
                                name: 'Gary',id:7,
                                title: 'Intern'
                            }
                        ]
                    }
                ]
            },
            {
                name: 'Design',id:8,
                children: [{
                    name: 'Freeman',id:9,
                    title: 'Designer'
                }]
            },
            {
                name: 'S&S',id:10,
                children: [{
                    name: 'Nikky',id:11,
                    title: 'Robot'
                }]
            }
        ];
        app = angular.module('testApp', []).controller('treeTable', [
            '$scope',
            '$filter',
            function ($scope, $filter) {
                $scope.list = list;
                //$scope.item.selected={};
                $scope.initCheckbox = function (item, parentItem) {
                    return item.selected = parentItem && parentItem.selected || item.selected || false;
                };
                $scope.toggleCheckbox = function (item, parentScope) {
                    if (item.children != null) {
                        $scope.$broadcast('changeChildren', item);
                    }
                    if (parentScope.item != null) {
                        return $scope.$emit('changeParent', parentScope);
                    }
                };
                $scope.$on('changeChildren', function (event, parentItem) {
                    var child, i, len, ref, results;
                    ref = parentItem.children;
                    results = [];
                    for (i = 0, len = ref.length; i < len; i++) {
                        child = ref[i];
                        child.selected = parentItem.selected;
                        if (child.children != null) {
                            results.push($scope.$broadcast('changeChildren', child));
                        } else {
                            results.push(void 0);
                        }
                    }
                    return results;
                });
                return $scope.$on('changeParent', function (event, parentScope) {
                    var children;
                    children = parentScope.item.children;
                    parentScope.item.selected = $filter('selected')(children).length === children.length;
                    parentScope = parentScope.$parent.$parent;
                    if (parentScope.item != null) {
                        return $scope.$broadcast('changeParent', parentScope);
                    }
                });
            }
        ]);
        app.filter('selected', [
            '$filter',
            function ($filter) {
                return function (files) {
                    return $filter('filter')(files, { selected: true });
                };
            }
        ]);
    </script>
</head>
<body>
    <div class="wrapper" ng-app="testApp" ng-controller="treeTable">
        <table class="table-nested">
            <tbody  ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-repeat="item in list"></tbody>
        </table>
        <script id="table_tree.html" type="text/ng-template">
            <tr ng-class="{parent: item.children}" ng-init="parentScope = $parent.$parent; initCheckbox(item, parentScope.item)">
                <td class="cell-name">
                    <div class="indent" ng-click="item.opened = !item.opened"></div>
                    <input ng-change="toggleCheckbox(item, parentScope)" ng-model="item.selected" type="checkbox"  />
                    {{item.name}}
                </td>
            </tr>
            <tr class="children" ng-if="item.children && item.children.length > 0">
                <td colspan="4">
                    <table class="table-child">
                        <tbody ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-init="level = level + 1" ng-repeat="item in item.children"></tbody>
                    </table>
                </td>
            </tr>
        </script>
        {{item.selected | json}}
    </div>
</body>
        $scope.seleceds = {};
        $scope.initCheckbox = function (item, parentItem) {
            return $scope.seleceds[item.id] = parentItem && $scope.seleceds[parentItem.id] || $scope.seleceds[item.id] || false;
        };
        $scope.toggleCheckbox = function (item, parentScope) {
            if (item.children != null) {
                $scope.$broadcast('changeChildren', item);
            }
            if (parentScope.item != null) {
                return $scope.$emit('changeParent', parentScope);
            }
        };
        $scope.$on('changeChildren', function (event, parentItem) {
            var child, i, len, ref, results;
            ref = parentItem.children;
            results = [];
            for (i = 0, len = ref.length; i < len; i++) {
                child = ref[i];
                $scope.seleceds[child.id] = $scope.seleceds[parentItem.id];
                if (child.children != null) {
                    results.push($scope.$broadcast('changeChildren', child));
                } else {
                    results.push(void 0);
                }
            }
            return results;
        });
        return $scope.$on('changeParent', function (event, parentScope) {
            var children;
            children = parentScope.item.children;
            $scope.seleceds[parentScope.item.id] = $filter('selected')(children, $scope.seleceds).length === children.length;
            parentScope = parentScope.$parent.$parent;
            if (parentScope.item != null) {
                return $scope.$broadcast('changeParent', parentScope);
            }
        });
 <input ng-change="toggleCheckbox(item, parentScope)" ng-model="seleceds[item.id]" type="checkbox"/>

并将
{item.selected | json}}
更改为
{{seleceds | objToArray}

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
    <script>
        var app, list;
        list = [
            {
                name: 'Developer',
                opened: true,
                children: [
                    {
                        name: 'Front-End',id:1,
                        children: [
                            {
                                name: 'Jack',id:2,
                                title: 'Leader'
                            },
                            {
                                name: 'John',id:3,
                                title: 'Senior F2E'
                            },
                            {
                                name: 'Jason',id:4,
                                title: 'Junior F2E'
                            }
                        ]
                    },
                    {
                        name: 'Back-End',id:5,
                        children: [
                            {
                                name: 'Mary',id:6,
                                title: 'Leader'
                            },
                            {
                                name: 'Gary',id:7,
                                title: 'Intern'
                            }
                        ]
                    }
                ]
            },
            {
                name: 'Design',id:8,
                children: [{
                    name: 'Freeman',id:9,
                    title: 'Designer'
                }]
            },
            {
                name: 'S&S',id:10,
                children: [{
                    name: 'Nikky',id:11,
                    title: 'Robot'
                }]
            }
        ];
        app = angular.module('testApp', []).controller('treeTable', [
            '$scope',
            '$filter',
            function ($scope, $filter) {
                $scope.list = list;
                //$scope.item.selected={};
                $scope.initCheckbox = function (item, parentItem) {
                    return item.selected = parentItem && parentItem.selected || item.selected || false;
                };
                $scope.toggleCheckbox = function (item, parentScope) {
                    if (item.children != null) {
                        $scope.$broadcast('changeChildren', item);
                    }
                    if (parentScope.item != null) {
                        return $scope.$emit('changeParent', parentScope);
                    }
                };
                $scope.$on('changeChildren', function (event, parentItem) {
                    var child, i, len, ref, results;
                    ref = parentItem.children;
                    results = [];
                    for (i = 0, len = ref.length; i < len; i++) {
                        child = ref[i];
                        child.selected = parentItem.selected;
                        if (child.children != null) {
                            results.push($scope.$broadcast('changeChildren', child));
                        } else {
                            results.push(void 0);
                        }
                    }
                    return results;
                });
                return $scope.$on('changeParent', function (event, parentScope) {
                    var children;
                    children = parentScope.item.children;
                    parentScope.item.selected = $filter('selected')(children).length === children.length;
                    parentScope = parentScope.$parent.$parent;
                    if (parentScope.item != null) {
                        return $scope.$broadcast('changeParent', parentScope);
                    }
                });
            }
        ]);
        app.filter('selected', [
            '$filter',
            function ($filter) {
                return function (files) {
                    return $filter('filter')(files, { selected: true });
                };
            }
        ]);
    </script>
</head>
<body>
    <div class="wrapper" ng-app="testApp" ng-controller="treeTable">
        <table class="table-nested">
            <tbody  ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-repeat="item in list"></tbody>
        </table>
        <script id="table_tree.html" type="text/ng-template">
            <tr ng-class="{parent: item.children}" ng-init="parentScope = $parent.$parent; initCheckbox(item, parentScope.item)">
                <td class="cell-name">
                    <div class="indent" ng-click="item.opened = !item.opened"></div>
                    <input ng-change="toggleCheckbox(item, parentScope)" ng-model="item.selected" type="checkbox"  />
                    {{item.name}}
                </td>
            </tr>
            <tr class="children" ng-if="item.children && item.children.length > 0">
                <td colspan="4">
                    <table class="table-child">
                        <tbody ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-init="level = level + 1" ng-repeat="item in item.children"></tbody>
                    </table>
                </td>
            </tr>
        </script>
        {{item.selected | json}}
    </div>
</body>

您可以看到一个演示

您需要在任何单击提交时获取复选框列表?是。我想用有棱角的方式来做。i、 将数组绑定到复选框。
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
    <script>
        var app, list;
        list = [
            {
                name: 'Developer',
                opened: true,
                children: [
                    {
                        name: 'Front-End',id:1,
                        children: [
                            {
                                name: 'Jack',id:2,
                                title: 'Leader'
                            },
                            {
                                name: 'John',id:3,
                                title: 'Senior F2E'
                            },
                            {
                                name: 'Jason',id:4,
                                title: 'Junior F2E'
                            }
                        ]
                    },
                    {
                        name: 'Back-End',id:5,
                        children: [
                            {
                                name: 'Mary',id:6,
                                title: 'Leader'
                            },
                            {
                                name: 'Gary',id:7,
                                title: 'Intern'
                            }
                        ]
                    }
                ]
            },
            {
                name: 'Design',id:8,
                children: [{
                    name: 'Freeman',id:9,
                    title: 'Designer'
                }]
            },
            {
                name: 'S&S',id:10,
                children: [{
                    name: 'Nikky',id:11,
                    title: 'Robot'
                }]
            }
        ];
        app = angular.module('testApp', []).controller('treeTable', [
            '$scope',
            '$filter',
            function ($scope, $filter) {
                $scope.list = list;
                //$scope.item.selected={};
                $scope.initCheckbox = function (item, parentItem) {
                    return item.selected = parentItem && parentItem.selected || item.selected || false;
                };
                $scope.toggleCheckbox = function (item, parentScope) {
                    if (item.children != null) {
                        $scope.$broadcast('changeChildren', item);
                    }
                    if (parentScope.item != null) {
                        return $scope.$emit('changeParent', parentScope);
                    }
                };
                $scope.$on('changeChildren', function (event, parentItem) {
                    var child, i, len, ref, results;
                    ref = parentItem.children;
                    results = [];
                    for (i = 0, len = ref.length; i < len; i++) {
                        child = ref[i];
                        child.selected = parentItem.selected;
                        if (child.children != null) {
                            results.push($scope.$broadcast('changeChildren', child));
                        } else {
                            results.push(void 0);
                        }
                    }
                    return results;
                });
                return $scope.$on('changeParent', function (event, parentScope) {
                    var children;
                    children = parentScope.item.children;
                    parentScope.item.selected = $filter('selected')(children).length === children.length;
                    parentScope = parentScope.$parent.$parent;
                    if (parentScope.item != null) {
                        return $scope.$broadcast('changeParent', parentScope);
                    }
                });
            }
        ]);
        app.filter('selected', [
            '$filter',
            function ($filter) {
                return function (files) {
                    return $filter('filter')(files, { selected: true });
                };
            }
        ]);
    </script>
</head>
<body>
    <div class="wrapper" ng-app="testApp" ng-controller="treeTable">
        <table class="table-nested">
            <tbody  ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-repeat="item in list"></tbody>
        </table>
        <script id="table_tree.html" type="text/ng-template">
            <tr ng-class="{parent: item.children}" ng-init="parentScope = $parent.$parent; initCheckbox(item, parentScope.item)">
                <td class="cell-name">
                    <div class="indent" ng-click="item.opened = !item.opened"></div>
                    <input ng-change="toggleCheckbox(item, parentScope)" ng-model="item.selected" type="checkbox"  />
                    {{item.name}}
                </td>
            </tr>
            <tr class="children" ng-if="item.children && item.children.length > 0">
                <td colspan="4">
                    <table class="table-child">
                        <tbody ng-class="{opened: item.opened}" ng-include="'table_tree.html'" ng-init="level = level + 1" ng-repeat="item in item.children"></tbody>
                    </table>
                </td>
            </tr>
        </script>
        {{item.selected | json}}
    </div>
</body>