AngularJS检查对象/数组为空

时间:2016-09-17 16:19:19

标签: angularjs arrays object is-empty

我已经阅读了很多问题和答案,没有人帮助过我。我有这个功能:

var model = {};

var mediaReproductionApp = angular.module("mediaReproductionApp",["ui.event",'ngAnimate']);

mediaReproductionApp.run(function ($http) {
    $http.get("movimenti_per_totem.json").success(function (data) {
        model.items = data;
    });
});

mediaReproductionApp.controller("MediaReproductionCtrl", function($scope, $http, $timeout) {
    $scope.item = model;

    $scope.playVideo = function(media) {
        return media ? "../gallery/video/" + media : null;
    }

    $scope.reproductionCodeIsEmpty = function() {
        return Object.keys($scope.item).length == 0;
    }

    $scope.endVideo = function() {
        $timeout(function() {
            $http.get("php/delete_record.php").success(function () {
                $http.get("movimenti_per_totem.json").success(function (data) {
                    $scope.item.items = data;
                });
            });
            if($scope.reproductionCodeIsEmpty()) {
                prelevaDati('../json/52.json', 'spot_creator', 'sc1', modello_SC, {});
                $scope.checkMediaData();
            }
        },1800);
    }

    $scope.checkMediaData = function() {
        $http.get("movimenti_per_totem.json").success(function (data) {
            $scope.item.items = data;
        });
        if($scope.reproductionCodeIsEmpty()) {
            $timeout(function(){$scope.checkMediaData();},2000);
        }
    }

    $scope.checkMediaData();
});

这是我的JSON文件,当它不为空时:

[ {"media":"zafferano_VP8.webm"}, {"media":"amaretti_VP8.webm"}, {"media":"passata_VP8.webm"}]

当它为空时永远不会返回true。我也试过了:

$scope.reproductionCodeIsEmpty = function() {
    return $scope.item.length == 0;
}

$scope.reproductionCodeIsEmpty = function() {
    return $scope.item == {};
}

$scope.reproductionCodeIsEmpty = function() {
    return angular.isUndefined($scope.item) || $scope.item === null;
}

$scope.reproductionCodeIsEmpty = function() {
    return angular.isUndefined($scope.item.items) || $scope.item.items === null;
}

没有任何作用......你能告诉我为什么吗? 谢谢!

2 个答案:

答案 0 :(得分:1)

在您添加问题之后:

您将模型定义为:model.items = data;

所以,你的空模型是:model = { items: [] }

这就是为什么它不是空的。您需要测试model.items是否为空。

如果您需要经过测试的方式来判断对象是否为空,我建议lodash.isEmpty()。您可以将它用于“任何类似数组的值,例如参数对象,数组,缓冲区,字符串或类似jQuery的集合”。

https://lodash.com/docs/4.15.0#isEmpty

由于我不知道您的model是什么,这将涵盖最可能的数据类型。

_.isEmpty(null);
// => true

_.isEmpty(true);
// => true

_.isEmpty(1);
// => true

_.isEmpty([1, 2, 3]);
// => false

_.isEmpty({ 'a': 1 });
// => false

答案 1 :(得分:0)

如果要检查对象/数组是否为空,请使用:

angular.equals({}, yourObject);
angular.equals([], yourArray);