简体   繁体   English

使用ng-repeat复选框的AngularJS过滤器显示所有页面加载

[英]AngularJS filter using ng-repeat checkboxes show all on page load

This one is similar to a post that someone posted before but different variations. 该帖子类似于某人之前发布的帖子,但有所不同。 I am having trouble filtering check boxes where I want all the products to load on page load and when I check multiple check boxes within technologyArray and/or technologyArray2, it shows all the products that match the check box name. 我在过滤复选框时遇到麻烦,我希望所有产品都在页面加载时加载,并且当我在technologyArray和/或technologyArray2中选中多个复选框时,它将显示与复选框名称匹配的所有产品。 Right now, my check boxes are just doing an AND condition so when I check multiple check boxes, I get no results. 现在,我的复选框仅执行AND条件,因此当我选中多个复选框时,没有任何结果。 Here's my code inJSFiddle . 这是我在JSFiddle中的代码。 http://jsfiddle.net/missggnyc/9aL1hm4x/6/ http://jsfiddle.net/missggnyc/9aL1hm4x/6/

HTML 的HTML

    <div ng-controller="MyCtrl">
   <h1>Language 1</h1>
    <div class="no-decoration" ng-repeat="tech in technologyArray">
        <label><input type="checkbox" ng-model="tech.on" ng-change="checkChange()" />{{tech.name}}
        </label>
    </div><br>
     <h1>Language 2</h1>
    <div class="no-decoration" ng-repeat="tech2 in technologyArray2">
        <label><input type="checkbox" ng-model="tech2.on" ng-change="checkChange2()" />{{tech2.name}}
        </label>
    </div>
    <hr>
    Results:
    <div ng-repeat="portfolioItem in portfolioArray | filter:myFunc | filter:myFunc2" class="ng-scope">
        <h3> {{portfolioItem.name}}</h3>
    </div>    
</div>

JS JS

var myApp = angular.module('myApp', []);
function MyCtrl($scope) {

    $scope.showAll = true;
    $scope.checkChange = function() {
        for(t in $scope.technologyArray){
            if($scope.technologyArray[t].on){
                $scope.showAll = false;
                return;
            }
        }
        $scope.showAll = true;
    };

   $scope.myFunc = function(a) {
       if($scope.showAll) { return true; }

       var sel = false;

        for(tech in $scope.technologyArray){
            var t = $scope.technologyArray[tech];
            console.log(t);
            if(t.on){
                if(a.technology.indexOf(t.name) == -1){
                    return false;
                }else{
                    sel = true;
                }
            }           
        }
       return sel;
    };

    $scope.showAll2 = true;
    $scope.checkChange2 = function() {
        for(t2 in $scope.technologyArray2){
            if($scope.technologyArray2[t2].on){
                $scope.showAll2 = false;
                return;
            }
        }
        $scope.showAll2 = true;
    };

   $scope.myFunc2 = function(b) {
       if($scope.showAll2) { return true; }

       var sel2 = false;

        for(tech2 in $scope.technologyArray2){
            var t2 = $scope.technologyArray2[tech2];
            console.log(t2);
            if(t2.on){
                if(b.technology2.indexOf(t2.name) == -1){
                    return false;
                }else{
                    sel2 = true;
                }
            }           
        }
       return sel2;
    };


    $scope.technologyArray = [{ name: "HTML", on: false}, {name:"CSS", on: false}, {name:"Django", on: false}, {name:"Python", on: false}, {name:"AngularJS", on: false}, {name:"Javascript", on: false}, {name:"3rd party Payment API", on: false}, {name:"3rd party Libraries", on: false}] 

    $scope.technologyArray2 = [{name:"Jquery", on: false}, {name:"RestfulAPI", on: false}, {name:"AAAAAHH", on: false}, {name:"NodeJS", on: false}, {name:"Mongo", on: false}, {name:"Express", on: false}, {name:"Jade", on: false}, {name:"Wordpress", on: false}, {name:"MySQL", on: false}, {name:"Joomla", on: false}, {name:"Magento", on: false}, {name:"Jira", on:false}];

    $scope.portfolioArray = [{
        "id": "1",
        "name": "Storm Pig",
        "technology": ["HTML", "CSS", "Django", "Python", "AngularJS", "Javascript", "3rd party Payment API", "3rd party Libraries"]
    }, {
        "id": "2",
        "name": "Placer",
        "technology": ["HTML", "CSS", "Django", "Python", "AngularJS", "Javascript", "Jquery"]
    }, {
        "id": "3",
        "name": "Custom Proposal App",
        "technology": ["RestfulAPI", "AAAAAHH", "AngularJS", "HTML", "CSS", "Javascript", "NodeJS", "Mongo", "Express", "Jade"]
    }, {
        "id": "4",
        "name": "21 Zero",
        "technology": ["HTML", "CSS", "Wordpress", "MySQL"]
    }, {
        "id": "5",
        "name": "Detour Journal",
        "technology": ["HTML", "CSS", "Joomla", "MySQL"]
    }, {
        "id": "6",
        "name": "Dex Custom Websites",
        "technology": ["HTML", "CSS", "Wordpress", "MySQL", "Magento", "Jira"]
    }, {
        "id": "7",
        "name": "Conversion Jump",
        "technology": ["HTML", "CSS", "Joomla", "MySQL"]
    }, {
        "id": "8",
        "name": "The Canyons Pass",
        "technology": ["HTML", "CSS", "Joomla", "MySQL"]
    }]


}

Please Change this Condition 请更改此条件

          if(a.technology.indexOf(t.name) == -1){
                    return false;
                }else{
                    sel = true;
                }
            }      

===> ===>

 if(a.technology.indexOf(t.name) != -1){
                    return  true;
                }else{
                    sel = false;
                }

Here Is an example for technologyArray 这是technologyArray的一个例子

http://jsfiddle.net/shadiq_aust/9aL1hm4x/9/ http://jsfiddle.net/shadiq_aust/9aL1hm4x/9/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM