使用anguarJS从json对象嵌套表

时间:2016-12-26 09:57:29

标签: javascript angularjs json

我尝试使用angular显示json对象。对象可能有嵌套对象,所以我需要在运行时进行评估。 逻辑如下: 对于每个key-val(k,v):    如果v是一个对象,则:对于每个(k2,v2),在HTML_TD中添加另一个嵌套表。如果不是 - 需要在HTML_TD中打印值

嵌套对象有效。 问题是:当v是一个对象时,我希望表达式计算为''并且什么都不打印(因为我会进入内部循环k2,v2),而是即使v是一个对象,它也会将其打印到HTML_TD < / p>

代码:

<table border="1">
<tr ng-repeat="(k,v) in json.properties">
    <td> {{ k }} </td>
    <td> {{ typeof (v) == 'object' ? '' : v }} </td>
    <td>
        <table>
            <tr ng-repeat="(k2,v2) in v">
                <td> {{ k2 }} </td>
                <td> {{ v2 }} </td>
            </tr>
        </table>
    </td>
</tr>

2 个答案:

答案 0 :(得分:2)

typeof函数没有在angularjs模板插值上定义,模板语法在javascript函数方面有点限制,但你可以在你的范围内声明它,如下所示:

$scope.typeof = function(obj) {
    return typeof(obj);
};

因此,在您的示波器上可以看到名为typeof的函数,并且您的snipet将能够正常工作。波纹管snipet是实现此解决方案的一个简单示例。

&#13;
&#13;
angular.module('myApp', [])
  .controller('myController', function($scope) {

    $scope.json = {
      properties: {
        a: 'A',
        b: 'B',
        c: {
          a1: 'A1'
        }
      }
    };

    $scope.typeof = function(obj) {
      return typeof(obj);
    };

  });

angular.element(document).ready(function() {
  angular.bootstrap(document, ['myApp']);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.js"></script>
<div ng-controller="myController">
  <table border="1">
    <tr ng-repeat="(k,v) in json.properties">
      <td>{{ k }}</td>
      <td>{{ typeof(v) == 'object' ? '' : v }}</td>
      <td>
        <table border="1">
          <tr ng-repeat="(k2,v2) in v">
            <td>{{ k2 }}</td>
            <td>{{ v2 }}</td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我认为角度解析器不允许在模板中使用typeof函数。 但是您可以在控制器中定义一个方法来获取typeof。 E.g:

$scope.getTypeof = function(value) {
        return typeof value;
};

现在在模板代码中调用此方法:

{{ getTypeof(v) === 'object' ? '' : v }}