AngularJS – Фильтровать пустые объекты
У меня есть объект $ scope.myData, который содержит кусок данных. То, что я пытаюсь сделать, это отображать данные, но отфильтровывать нулевые и пустые строки:
$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 } ]
Я могу выполнить ng-repeat по указанному выше и фильтровать null через:
{{ data.ID }} {{ data.Message }}
Но как я могу фильтровать пустые строки, например:
"Message" : " "
благодаря
Мы можем просто использовать ng-if здесь:
{{ data.ID }} {{ data.Message }}
Вы можете использовать функцию вместо объекта, подобного этому
{{ data.ID }} {{ data.Message }}
И в controllerе
$scope.emptyOrNull = function(item){ return !(item.Message === null || item.Message.trim().length === 0) }
Ну, вы можете создать собственный фильтр:
.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; }; }])
И в вашем HTML:
DEMO
Вы можете использовать чартер. Попробуйте проверить это.
Вы можете использовать угловой фильтр для этого:
Рабочий скрипт
Фрагмент кода:
.filter('filterData',function(){ return function(data) { var dataToBePushed = []; data.forEach(function(resultData){ if(resultData.Message && resultData.Message != " ") dataToBePushed.push(resultData); }); return dataToBePushed; } });
Если вы хотите отфильтровать значения в пустом объекте, вы можете создать собственный фильтр и фильтровать каждый на основе значения.
Что-то вроде этого:
.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; }; });
Пример jsFiddle
Вы также можете использовать директиву ng-if и функцию, которая анализирует объекты по своему усмотрению.