I have a factory that obtains the data from a WebAPI, it returns all the data, but the filter does not work:
myApp.factory('Canchas', function($http){
var Canchas = {};
Canchas.list = [];
Canchas.getDataFromServer = function getDataFromServer(){
if(!_.isEmpty(Canchas.list)) return;
return $http.get('http://localhost:666/api/canchas/getCahchas').then(requestSuccessful, requestUnsuccessful);
function requestSuccessful(response){
if(_.isEmpty(response.data)) throw new Error();
Canchas.list = response.data;
}
function requestUnsuccessful(){
throw new Error();
}
};
Canchas.getFilterCanchas = function getFilterCanchas(filtro){
return _.filter(Canchas.list, {'data3':true});
};
return Canchas; });
The Json result has the following format:
[{
"name": "aaa",
"data1": true,
"data2": false,
"data3": true
},
{
"name": "bbb",
"data1": true,
"data2": false,
"data3": false
},
{
"name": "ccc",
"data1": true,
"data2": true,
"data3": true
}]
From a controller I generate a "filter" to pass it to the factory and I want to get the value of "aaa" and "ccc" when data1 and data3 are true. I've tried with _.filter and _.find but I can not get the results
myApp.controller('geoCtrl', function($scope, Canchas){
var filtro = [];
$scope.filtrodata = function(){
filtro = _.uniqWith(filtro, _.isEqual);
var pusher;
if($scope.j1===true){
$scope.insertardata({'data1':true});
}else{
$scope.borrardata({'data1':true});
}
if($scope.j2===true){
$scope.insertardata({'data2':true});
}else{
$scope.borrardata({'data2':true});
}
if($scope.j3===true){
$scope.insertardata({'data3':true});
}else{
$scope.borrardata({'data3':true});
}
filtro = _.uniqWith(filtro, _.isEqual);
$scope.detalle = Canchas.getFilterCanchas(filtro);
}
$scope.insertardata = function(objeto){
pusher = _(filtro).push(objeto);
pusher = pusher.commit();
}
$scope.borrardata = function(objeto){
if(_.some(filtro, objeto)) {
_.remove(filtro, objeto);
}
}});