如何在特定树节点上而不是在整个树上应用过滤器功能

时间:2017-11-09 17:05:39

标签: angularjs html5 angular-filters

我在搜索框中搜索compName-1。它返回找到此compName-1字符串的所有repos。

我不希望搜索选项在所有回购中搜索。我希望它能够搜索特定的回购品。有没有办法实现它?

请在这个plunker找到我的问题。 https://plnkr.co/edit/iCOiJDjeP8httwnf2c0t?p=preview

Controller.js

var app = angular.module('testApp', []);
app.controller('treeTable', ['$scope', '$http',  function ($scope, $http) {

  $scope.list = [];
  $scope.list.push({name: "repo 1", version:"0.0", size:"0", description:" ", label: "", date: "XXX", id:"repo1"});
  $scope.list.push({name: "repo 8", version:"0.0", size:"0", description:" ", label: "", date: "XXX", id:"repo2"});
  $scope.list.push({name: "repo 7", version:"0.0", size:"0", description:" ", label: "", date: "XXX", id:"repo3"});

  $scope.displayChildren = function(item, id) {

            console.log(item.showTree);
            item.showTree =  !item.showTree;
            console.log(id);

            if(id === 'repo'+1) {
                if(!(item.children && item.children.length > 0)) {
            $http.get("List_repo1.json")
            .then(function(response) {
                console.log('response repo1');
                item.children = response.data.response.repoBundles;
                item.showTree = true;
            });
            }
        }

            if(id === 'repo'+2) {
                if(!(item.children && item.children.length > 0)) {
            $http.get("List_repo2.json")
            .then(function(response) {
                console.log('response repo2');
                item.children = response.data.response.repoBundles;
                item.showTree = true;
            });
            }
        }

            if(id === 'repo'+3) {
                if(!(item.children && item.children.length > 0)) {
            $http.get("List_repo3.json")
            .then(function(response) {
                console.log('response repo3');
                item.children = response.data.response.repoBundles;
                item.showTree = true;
            });
                }
            }
  };

  $scope.toggleChildren = function(item, parentItem) {

            console.log(parentItem);
            if(parentItem !== void 0) {
                if(parentItem.bundles !== void 0) {
                    $scope.$emit('changeBundles', parentItem);
                } else if(parentItem.item.children !== void 0) {
                    console.log('parent child');
                    $scope.$emit('changeParent', parentItem);
                } 
            }

            if (item.children !== void 0) {
                console.log(item.children);
                console.log('inside children');
                $scope.$broadcast('changeChildren', item);
            } else if(item.components !== void 0){
                console.log(item + 'inside comp');
                $scope.$broadcast('changeComponents', item);
            }
        };

        $scope.toggleAllCheckboxes = function ($event) {
        var i, item, len, ref, results, selected;
        selected = $event.target.checked;
        if(selected) {
            $scope.selectedCheckbox = false;
        } else {
            $scope.selectedCheckbox = true;
        }
        ref = $scope.list;
        results = [];
        for (i = 0, len = ref.length; i < len; i++) {
            item = ref[i];
            item.selected = selected;
            if (item.children != null) {
                results.push($scope.$broadcast('changeChildren', item));
            } else {
                results.push(void 0);
            }
        }

        return results;
        };

        $scope.$on('changeChildren', function (event, parentItem) {
            var child, i, len, ref, results;
            ref = parentItem.children;
            results = [];
            console.log(ref === void 0);

            for (i = 0, len = ref.length; i < len; i++) {
                child = ref[i];
                child.selected = parentItem.selected;
                console.log("child" + child);
                if (child.components != null) {
                    console.log("inside if  " + child.components);
                    results.push($scope.$broadcast('changeComponents', child));
                } else {
                    results.push(void 0);
                }
            }

            return results;
        });

        $scope.$on('changeComponents', function (event, parentItem) {
            var child, i, len, ref, results;
            ref = parentItem.components;
            results = [];
            console.log(parentItem.selected);
            for (i = 0, len = ref.length; i < len; i++) {
                child = ref[i];
                child.selected = parentItem.selected;
                console.log("child" + child.selected + child.value);
            }
        });

        $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);
            }
        });

        $scope.$on('changeBundles', function (event, parentScope) {
            var children;
            children = parentScope.bundles.components;
            parentScope.bundles.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 });
                                };
                            }
                        ]);

0 个答案:

没有答案