2017-03-17 2 views
0

Je veux filtrer mysql avec angularjs.javascript si non vide élément ajouter fonction retour

my fiddle

lorsque vous vérifiez le bouton TV et cliquez sur soumettre. (Valeurs du bouton TV = 2) Le filtre angularjs trouve 2 dans la colonne des commodités. cela fonctionne. mais quand la TV et CABLE TV vérifient et cliquent sur le filtre de soumission ne fonctionne pas. Parce que mon code de filtre est mauvais.

$scope.am_en = function() 
 
{ 
 
$scope.ot_Filter = function (location) { 
 
return location.amenities.indexOf(1)==0; 
 
}; 
 
}

comment changer cette ligne indexOf (1)

cette obtenir une valeur indexOf (1) je veux valeur multiple indexOf ('1,7,9,11') Indexof peut-être une autre méthode?

Html:

<input type="checkbox" name="more_filter[]" value="1" id="map-search-amenities-1" ng-checked="false"> 
 
<input type="checkbox" name="more_filter[]" value="2" id="map-search-amenities-2" ng-checked="false"> 
 
..vs 
 
<button id="more_filter_submit" ng-click="am_en();">Submit</button>

J'essaie cela, mais ne fonctionne pas:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.21/angular.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
$scope.am_en = function(){ 
 
$scope.ot_Filter = function (location) { 
 
var xC = $(".hosting_amenities input:checkbox:checked").map(function(){return $(this).val();}).get(); 
 
var xxc = "["+xC+"]"; 
 
var k1 = xxc.indexOf(1)!==-1; 
 
var k2 = xxc.indexOf(2)!==-1; 
 
var k3 = xxc.indexOf(3)!==-1; 
 
... 
 

 
var zz1 = location.amenities.indexOf(1)==0; 
 
var zz2 = location.amenities.indexOf(2)==0; 
 
var zz3 = location.amenities.indexOf(3)==0; 
 
... 
 

 
return zz1 || zz2 || zz3 || ...; 
 
}; 
 
}

Description:

k1 == zz1 
 

 
k2 == zz2

Je veux: Si k1 est égal à true ajoute ce retour de la phrase: || zz1 Si l'élément est présent retour ajouter ou élément

Pour l'exemple 1:

if (k1 == true) ? "k1":""; 
 

 
if (k2 == true) ? "|| k2 ":""; 
 

 
if (k3 == true) ? "|| k3 ":""; 
 

 
return k1 || k3;

Pour l'exemple 2:

k1 == false; 
 

 
k2 == true; 
 

 
k3 == true; 
 

 
k4 == true; 
 

 
return k2 || k3 || k4;

+1

Je suis sous l'impression ici, qu'une refonte de la pile toute logique serait utile. Chaque fois que vous voyez "ceci, ou que si cela, ou si cela mais pas l'autre alors la chose ou l'autre chose ...", vous construisez un château de cartes dangereusement fragile et difficile à déboguer. Vous pouvez généralement obtenir une bien meilleure solution en faisant abstraction du problème et en repensant généralement en termes de structure de données ou en réduisant le problème en étapes logiques, généralement en traitant avec des instructions (fonctionnelles ceci et cela). –

+1

Je ne sais pas non plus ce que signifie "ne pas ajouter de résultat". –

+0

Je ne veux pas de retour ajouté – toplumdusmani

Répondre

0

En fonction de votre réponse à mon retraitement (oui, true), ici vous allez:

let rooms = [ 
{ name : 'Room1', amenities : '1,3' }, 
{ name : 'Room2', amenities : '2,4' }, 
{ name : 'Room3', amenities : '1,2,3' }, 
{ name : 'Room4', amenities : '2,3,4' } 
]; 

let amenities = [ 
    { id : '1', name : 'Amenity1' }, 
    { id : '2', name : 'Amenity2' }, 
    { id : '3', name : 'Amenity3' }, 
    { id : '4', name : 'Amenity4' }, 
    ]; 

function getAmenities (room) { 

    // Turn the room amenity ids into an array 
    let ids_array = room.amenities.split (','); 

    // Filter the amenities table to get the array of amenities for this room 
    return amenities.filter (x => { 
     return (ids_array.indexOf (x.id) !== -1); 
    }); 
} 

// Show amenities for a given room 
rooms.forEach (x => { console.log (getAmenities (x)) })