AngularJS - 过滤空对象

时间:2014-07-28 08:29:29

标签: angularjs angularjs-scope angularjs-ng-repeat angular-filters

我有一个$ 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:

<div ng-repeat="data in myData | filter:{Message: '!!'}">
    {{ data.ID }}
    {{ data.Message }}
</div>

但我怎样才能过滤空字符串,例如:

"Message" : " "

由于

6 个答案:

答案 0 :(得分:56)

我们可以简单地使用ng-if here:

<div ng-repeat="data in myData " ng-if="data.Message">
 {{ data.ID }}
 {{ data.Message }}
</div>

答案 1 :(得分:18)

您可以使用函数而不是像这样的对象

<div ng-repeat="data in myData | filter:emptyOrNull">
  {{ data.ID }}
  {{ data.Message }}
</div>

在控制器中

$scope.emptyOrNull = function(item){
  return !(item.Message === null || item.Message.trim().length === 0)
}

答案 2 :(得分:7)

您可以创建自定义过滤器:

.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中:

<div ng-repeat="data in myData | hasSomeValue: data.Message">

DEMO

答案 3 :(得分:3)

您可以使用&#39;&#39;宪章。 试试这样的检查。

<div ng-repeat="data in myData | filter:{Message: ''}">

答案 4 :(得分:3)

您可以使用角度过滤器:

Working Fiddle

代码段:

.filter('filterData',function(){
    return function(data) {
        var dataToBePushed = [];
        data.forEach(function(resultData){
            if(resultData.Message && resultData.Message != " ")
                dataToBePushed.push(resultData);
        });
        return dataToBePushed;
    }
});

答案 5 :(得分:0)

如果要过滤掉空白对象中的值,可以创建自定义过滤器并根据值过滤每个过滤器。

这样的事情:

.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 example

您还可以使用ng-if指令和一个根据需要解析对象的函数。