AngularJS – Filtre objects vazios

Eu tenho um object $ scope.myData que contém um pedaço de dados. O que eu estou tentando fazer é exibir os dados, mas filtrar os nulos e seqüências vazias:

$scope.myData = [ { "ID" : "001", "Message" : "test test test test" }, { "ID" : "002", "Message" : "test test test test" }, { "ID" : "003", "Message" : "test test test test" }, { "ID" : "004", "Message" : "test test test test" }, { "ID" : "005", "Message" : " " }, { "ID" : "006", "Message" : "test test test test" }, { "ID" : "007", "Message" : "test test test test" }, { "ID" : "007", "Message" : null } ] 

Eu posso executar um ng-repeat no acima e filtrar null’s via:

 
{{ data.ID }} {{ data.Message }}

Mas como posso filtrar as strings vazias, por exemplo:

 "Message" : " " 

obrigado

Nós podemos simplesmente usar ng-if aqui:

 
{{ data.ID }} {{ data.Message }}

Você pode usar uma function em vez de um object como este

 
{{ data.ID }} {{ data.Message }}

E no controlador

 $scope.emptyOrNull = function(item){ return !(item.Message === null || item.Message.trim().length === 0) } 

Bem, você pode criar um filtro personalizado:

 .filter('hasSomeValue', [function(){ return function(input, param) { var ret = []; if(!angular.isDefined(param)) param = true; angular.forEach(input, function(v){ if(angular.isDefined(v.Message) && v.Message) { v.Message = v.Message.replace(/^\s*/g, ''); ret.push(v); } }); return ret; }; }]) 

E no seu HTML:

 

DEMO

Você pode usar o ” charter ”. Tente checar assim.

 

Você pode usar um filtro angular para isso:

Violino de trabalho

Fragmento de código:

 .filter('filterData',function(){ return function(data) { var dataToBePushed = []; data.forEach(function(resultData){ if(resultData.Message && resultData.Message != " ") dataToBePushed.push(resultData); }); return dataToBePushed; } }); 

Se você quisesse filtrar valores em um object vazio, poderia criar um filtro personalizado e filtrar cada um deles com base no valor.

Algo assim:

 .filter("notEmpty", function () { return function (object) { var filteredObj = {}; angular.forEach(object, function (val, key) { if (val != null) { if (typeof(val) === "object") { if (Object.keys(val).length > 0) { filteredObj[key] = val; } } else if (typeof(val) === "string") { if (val.trim() !== "") { filteredObj[key] = val; } } else { filteredObj[key] = val; } } }); return filteredObj; }; }); 

exemplo de jsFiddle

Você também pode usar a diretiva ng-if e uma function que analise os objects como achar melhor.