javascript - Vue.JS Multiple checkbox series to filter apps -


so here's problem, want apply 3 filters app thumbnails using vue.js (i never used framework before). works fine first filter don't know how proceed other ones. goal able pick 1 checkbox each category (platform, field of activity , device).

screenshot of should like. ("toutes" meaning "all")

here's html

<div id="filter-realisations">           <div id="filter">             <div class="filter_container">               <h3>filtrer</h3>               <div class="filter">                 <p>plateforme</p>                 <input type="radio" v-model="selectedplatform" value="allplatform" id="allplatform"><label for="allplatform">toutes</label>                 <input type="radio" v-model="selectedplatform" value="ios" id="ios" /><label for="ios">ios</label>                 <input type="radio" v-model="selectedplatform" value="android" id="android" /><label for="android">android</label>               </div>               <div class="filter">                 <p>secteur</p>                 <input type="radio" v-model="selectedsecteur" value="allsecteur" id="allsecteur" /><label for="allsecteur">toutes</label>                 <input type="radio" v-model="selectedsecteur" value="grandpublic" id="grandpublic"/><label for="grandpublic">grand public</label>                 <input type="radio" v-model="selectedsecteur" value="metier" id="metier" /><label for="metier">métier</label>                 <input type="radio" v-model="selectedsecteur" value="marchespublics" id="marchespublics" /><label for="marchespublics">marchés publics</label>                </div>               <div class="filter">                 <p>device</p>                 <input type="radio" v-model="selecteddevice" value="alldevice" id="alldevice" /><label for="alldevice">toutes</label>                 <input type="radio" v-model="selecteddevice" value="smartphone" id="smartphone" /><label for="smartphone">smartphone</label>                 <input type="radio" v-model="selecteddevice" value="tablet" id="tablet" /><label for="tablet"> tablette</label>                 <input type="radio" v-model="selecteddevice" value="watch" id="watch" /><label for="watch"> montre connectée</label>                </div>             </div>            </div>            <div id="realisations">             <div class="realisations_container">               <div class="realisations_bloc" v-for="app in filteredrealisations" v-bind:key="app">                 <img v-bind:src='"img/realisations/"+app.name+".jpg"' alt="app.name">                 <div class="overlay">                   <div class="app_description"><p>{{app.name}}</p></div>                   <div class="platform_container">                      <div class="device">                       <img v-bind:src='"img/"+app.device+".svg"' alt="app.device"/>                     </div>                     <div class="os">                       <img v-bind:src='"img/"+app.platform+".svg"'alt="app.platform"/>                     </div></div>                 </div>               </div>              </div>           </div>         </div> 

and here's script

var vm = new vue({     el:  "#filter-realisations",     data: {         realisations: [             { name: "asm", platform: "ios", secteur: "grandpublic", secteur: "grandpublic", device:"watch" },             { name: "biodiversea", platform: "android", secteur: "marchespublics", device:"tablet" },             { name: "cdbb", platform: "ios", secteur: "grandpublic", device:"smartphone" },             { name: "centre france", platform: "ios", secteur: "grandpublic", device:"watch" },             { name: "clermont", platform: "android", secteur: "grandpublic", device:"tablet" },             { name: "dassault", platform: "ios", secteur: "metier", device:"smartphone"},             { name: "journal", platform: "ios", secteur: "metier", device:"smartphone" },             { name: "somfy", platform: "android", secteur: "metier", device:"smartphone" },             { name: "sortir.vosges", platform: "android", secteur: "metier", device:"smartphone" },       { name: "sud radio", platform: "android", secteur: "metier", device:"smartphone" },       { name: "verifrom", platform: "android", secteur: "metier", device:"smartphone" },       { name: "sports", platform: "ios", secteur: "marchespublics", device:"watch" }          ],         selectedsecteur : "allsecteur",         selectedplatform: "allplatform",         selecteddevice : "alldevice"     },     computed: {         filteredrealisations: function() {             var vm = this;             var platform = vm.selectedplatform;             var secteur = vm.selectedsecteur;             var device = vm.selecteddevice;                if(platform === "allplatform") {                 return vm.realisations;             } else {                 return vm.realisations.filter(function(app) {                     return app.platform === platform;                 });             }              if(secteur === "allsecteur") {                 return vm.realisations;             } else {                 return vm.realisations.filter(function(app) {                     return app.secteur === secteur;                 });             }              if(device === "alldevice") {                 return vm.realisations;             } else {                 return vm.realisations.filter(function(app) {                     return app.device === device;                 });             }          }     } }); 

instead of trying return @ each stage, start result variable copy of realisations, , modify @ each stage, return @ end:

       var result;         if(platform === "allplatform") {             result = vm.realisations;         } else {             result = vm.realisations.filter(function(app) {                 return app.platform === platform;             });         }          if(secteur !== "allsecteur") {             result = result.filter(function(app) {                 return app.secteur === secteur;             });         }          if(device !== "alldevice") {             result = result.filter(function(app) {                 return app.device === device;             });         }         return result; 

Comments

Popular posts from this blog

javascript - Create a stacked percentage column -

Optimising Firebase database by automatically overwriting data -

javascript - Angular UI-Grid customTemplate directive causing rows to load slowly/? -