检查AngularJS模板中的对象大小,做错了

Check object size in AngularJS template, doing it wrong?

本文关键字:错了 对象 AngularJS 检查      更新时间:2023-09-26

我想在AngularJS模板中遍历myObject

这行不通:

<ul ng-if="Object.keys(myObject).length">
    <li ng-repeat="(key, val) in myObject">
        Value at key {{ key }} is: {{ val }}
    </li>
</ul>

没有显示,我怀疑是因为$scope.Object没有定义。

相反,我这样做:

在控制器/指令中:

$scope.sizeOf = function(obj) {
    return Object.keys(obj).length;
};

模板中:

<ul ng-if="sizeOf(myObject)">
    <li ng-repeat="(key, val) in myObject">
        Value at key {{ key }} is: {{ val }}
    </li>
</ul>

我不喜欢这个解决方案,因为这个功能在每个控制器或指令$scope中都是重复的。

你有更干净的解决方案吗?

谢谢!

您可以在任何地方使用ngIf指令中的Object。只要把它的引用放在根作用域:

app.run(function($rootScope) {
    $rootScope.Object = Object;
});

它也可以在独立的作用域中使用,比如在指令中。

乌利希期刊指南。在最新版本的Angular中,你不能再在表达式中引用Object了。在这种情况下,您需要单独引用方法:

app.run(function($rootScope) {
    $rootScope.keys = Object.keys;
});
,然后使用这个函数:
ng-if="keys(myObject).length"

在控制器中添加以下行

$scope.Object = Object;

那么您应该能够使用Object。

这难道还不够吗?

<ul ng-if="myObject">
  <li ng-repeat="(key, val) in myObject">
      Value at key {{ key }} is: {{ val }}
  </li>
</ul>

该指令处理null、undefined和空对象。普朗克的演示。尝试将对象修改为undefined、null或填充value。