2017-01-08 5 views
0

Я хотел бы иметь фильтр, который будет проверять, является ли данный json-объект пустым, нулевым или неопределенным. Без использования какой-либо сторонней библиотеки.Фильтр углов, чтобы проверить, пуст ли пуст null или undefined

function isObjValid(obj) { 
     return !(obj === undefined || obj === null || Object.keys(obj).length === 0) 
    }; 

Но когда я попытался отфильтровать объект из моего шаблона:

<ng-if ng-if="$ctrl.data | filter:isObjValid"> 
    ... 
</ng-if> 

Я получаю эту ошибку:

Error: [filter:notarray] Expected array but received: {} 

Есть ли способ избежать notarray?

ответ

1

Создание пользовательского фильтра

angular.module('myApp').filter('isValidObject', function(){ 
    return function(obj){ 
     return !(obj === undefined || obj === null || Object.keys(obj).length === 0); 
    } 
}); 

Использование в целях:

<div ng-if="$ctrl.data | isValidObject"> 

DEMO

+0

Спасибо, у меня была правильная логика. Но ваш плункер действительно помог мне понять, как я должен установить фильтр в своем шаблоне. – redAce

-1

Согласно Angular Documentation, вы можете использовать фильтры только для массива элементов. В вашем случае данные кажутся просто объектом, а не массивом.

Предложив вас без фильтра, как в коде ниже

<body ng-controller="MainCtrl"> 
    <p>Hello {{name}}!</p> 

    <div ng-if="isObjValid(data)"> 
    Valid data 
    </div> 
    <div ng-if="!isObjValid(data)"> 
    In Valid data 
    </div> 
    <div ng-if="isObjValid(name)"> 
    Valid name object 
    </div> 
</body> 

Ваш контроллер должен быть следующий

var app = angular.module('demoModule', []); 

app.controller('MainCtrl', function($scope) { 
    $scope.name = 'World'; 
    $scope.isObjValid=function(obj) { 
     return !(obj === undefined || obj === null || Object.keys(obj).length === 0) 
    }; 
}); 

Отъезд LIVE DEMO

+0

Первое утверждение не верно. Вы можете использовать специальные фильтры для фильтрации чего-либо. – charlietfl

Смежные вопросы