Angular的过滤器,用于检查对象是否为空null或未定义

时间:2017-01-08 12:12:03

标签: angularjs filter

我想有一个过滤器来检查给定的json对象是否为空,null或未定义。不使用任何第三方库。

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

2 个答案:

答案 0 :(得分:1)

创建自定义过滤器

html
<!DOCTYPE html>
<html>
    <head>
    <meta charset="utf-8" />
    <title>Example</title>
    </head>
    <body>
        <canvas id="webgl" width="640" height="480"></canvas>
        <script type="text/javascript" src="__javascript__/webgl.js">
        </script>
    </body>
</html>

在视图中使用:

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

DEMO

答案 1 :(得分:-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