如何在AngularJS视图中检查空对象

时间:2015-09-15 12:32:16

标签: javascript angularjs

在控制器的范围内,我有类似的东西:

$scope.card = {};

在视图中,我必须检查我的对象是否仍然是空文字{},或者它是否包含某些字段中的某些数据。

我试过了:

ng-show="angular.equals({}, card)"

ng-show="!angular.equals({}, card)"

但它不起作用。

有没有更好的方法?如何检查对象是否为空或是否包含某些字段?

15 个答案:

答案 0 :(得分:47)

您可以使用:Object.keys(card).length === 0

但请确保您在控制器的方法中使用它,因为Object在视图中不可用,例如:

$scope.isObjectEmpty = function(card){
   return Object.keys(card).length === 0;
}

然后你可以从视图中调用该函数:

ng-show="!isObjectEmpty(card)"

答案 1 :(得分:12)

使用json过滤器并与'{}'字符串进行比较。

<div>
    My object is {{ (myObject | json) == '{}' ? 'Empty' : 'Not Empty' }}
</div>

ng-show示例:

<div ng-show="(myObject | json) != '{}'"></div>

答案 2 :(得分:6)

创建一个检查对象是否为空的函数:

$scope.isEmpty = function(obj) {
  for(var prop in obj) {
      if(obj.hasOwnProperty(prop))
          return false;
  }
  return true;
};

然后,您可以在html中进行检查:

ng-show="!isEmpty(card)"

答案 3 :(得分:5)

请使用过滤器

尝试这种方式
angular.module('myApp')
    .filter('isEmpty', function () {
        var bar;
        return function (obj) {
            for (bar in obj) {
                if (obj.hasOwnProperty(bar)) {
                    return false;
                }
            }
            return true;
        };
    });

用法:

 <p ng-hide="items | isEmpty">Some Content</p>

来自:Checking if object is empty, works with ng-show but not from controller?

答案 4 :(得分:5)

试试这个:

@Module
@ActivityScope 
public class MyModule {
    private final Activity activity;

    public MyModule(Activity activity) {
        this.activity = activity;
    }

    @Provides
    @ActivityScope
    Activity activity() {
        return activity;
    }
}

答案 5 :(得分:4)

http://plnkr.co/edit/u3xZFRKYCUh4D6hGzERw?p=preview

由于范围内没有角度,因此您可以将其传递给控制器​​范围。

$scope.angular = angular;

答案 6 :(得分:2)

这将执行对象空检查:

    [0] => Array
    (
        [mydata] => Array
            (
                [id] => 79
                [my_birth_day] => 1990-06-20
                [my_address] => 400
                [my_age] => 26
                [my_name] => Joy
                [my_id] => 1
                [my_test] => math
                [created] => 2017-06-19 15:39:44
                [my_date] => 2017-08-13
            )

答案 7 :(得分:1)

您不应该将变量初始化为空对象,而应该让它为undefinednull,直到存在非null / {{1}的条件为止} value:

undefined

然后你的模板:

$scope.card;

if (someCondition = true) {
    $scope.card = {};
}

答案 8 :(得分:1)

尝试

   if(object.key==undefined){
     // object empty
   }else{
    // object exist
   }

以html

*ngIf="object.key==undefined"

答案 9 :(得分:0)

创建一个$scope函数来检查它并返回true或false,就像“isEmpty”函数一样,并在ng-if语句的视图中使用

ng-if="isEmpty(object)"

答案 10 :(得分:0)

component中检查空虚时,我遇到了类似的问题。在这种情况下,控制器必须定义一个实际执行测试的方法,并且视图使用它:

function FormNumericFieldController(/*$scope, $element, $attrs*/ ) {
    var ctrl = this;

    ctrl.isEmptyObject = function(object) {
        return angular.equals(object, {});
    }
}

<!-- any validation error will trigger an error highlight -->
<span ng-class="{'has-error': !$ctrl.isEmptyObject($ctrl.formFieldErrorRef) }">
    <!-- validated control here -->
</span>

答案 11 :(得分:0)

我必须验证空对象检查,如下所示

前:

<div  data-ng-include="'/xx/xx/xx/regtabs.html'" data-ng-if =
    "$parent.$eval((errors | json) != '{}')" >
</div>

错误是我的范围对象,它在我的控制器中被定义为$scope.error = {};

答案 12 :(得分:0)

您可以使用普通的javascript对象类来实现它, 对象类具有键函数,该函数以1个参数作为输入,如下所示:

  

Object.keys(obj).length === 0

您可以通过3种方式来实现它, 1)电流控制器范围 2)筛选 3)$ rootScope

1)第一种方法是当前的控制器范围

  

$ scope.isObjEmpty = function(obj){         返回Object.keys(obj).length === 0; }

然后您可以从视图中调用该函数:

ng-show =“!isObjEmpty(obj)”如果要动态显示和隐藏dom& ng-if =“!isObjEmpty(obj)”如果要动态删除或添加dom。

2)第二种方法是自定义过滤器。以下代码应适用于对象和数组

angular.module('angularApp')
    .filter('isEmpty', [function () {
        return function (obj) {
            if (obj == undefined || obj == null || obj == '')
                return true;
            if (angular.isObject(obj))
                return Object.keys(obj).length != 0;

            for (var key in obj) {
                if (obj.hasOwnProperty(key)) {
                    return false;
                }
            }
            return true;
        };
    }]);

    <div ng-hide="items | isEmpty"> Your content's goes here </div>

3)第三种方法是$ rootScope, 创建一个简单的javascript函数并将其添加到$ rootScope服务器中,它将在所有范围和UI中默认访问。

  

函数isObjEmpty(obj){         返回Object.keys(obj).length === 0; }

     

$ rootScope.isObjEmpty = isObjEmpty;

答案 13 :(得分:0)

一种有效的好方法是在HTML文件中使用如下所示的“ json管道”

my_list <- list(unique(sort(obs_IND$Action)))

obs_IND %>% 
count(my_list) %>%
group_by(Operatie) %>%
tally()

它使您可以清楚地查看对象是否为空。

我尝试了很多显示在这里的方法,但是没有一个起作用。

答案 14 :(得分:-1)

您必须检查对象是否为空。 AngularJs提供内置指令ng-if。下面给出一个例子。

<tr ng-repeat="key in object" ng-if="object != 'null'" >
    <td>{{object.key}}</td>
    <td>{{object.key}}</td>
</tr>