我想有一个过滤器来检查给定的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
?
答案 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