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 и функцию, которая анализирует объекты по своему усмотрению.

Interesting Posts

Возвращать результат по умолчанию для значения IN независимо

Dropbox выборочная синхронизация – возможно ли, чтобы новые папки, созданные на других устройствах, не были автоматически добавлены в папки синхронизации на текущем устройстве?

Что такое «Аргумент-зависимый поиск» (также известный как ADL или «Koenig Lookup»)?

Как подключить VPN автоматически после спящего режима / спящего режима в Vista / 7?

Динамические маршруты из базы данных для ASP.NET MVC CMS

Индивидуальный и не непрерывный выбор ячейки JTable

Определение текущего стека вызовов (для диагностических целей)

Windows 7: как я могу поднять текущее CMD-окно?

Что означают знаки плюс и минус в Objective C рядом с методом?

Микрософт-мышь и центр клавиатуры не показывают мою мышь

Функция ROT-13 в java?

как скрыть навигационную панель, когда я нажимаю навигационный controller?

Почему мои компиляторы не предотвращают включение нескольких определений?

Настройка RollingFileAppender в log4j

Создание ключа API для открытия карты Google

Давайте будем гением компьютера.