我尝试使用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>
答案 0 :(得分:2)
typeof
函数没有在angularjs模板插值上定义,模板语法在javascript函数方面有点限制,但你可以在你的范围内声明它,如下所示:
$scope.typeof = function(obj) {
return typeof(obj);
};
因此,在您的示波器上可以看到名为typeof
的函数,并且您的snipet将能够正常工作。波纹管snipet是实现此解决方案的一个简单示例。
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;
答案 1 :(得分:0)
我认为角度解析器不允许在模板中使用typeof
函数。
但是您可以在控制器中定义一个方法来获取typeof
。
E.g:
$scope.getTypeof = function(value) {
return typeof value;
};
现在在模板代码中调用此方法:
{{ getTypeof(v) === 'object' ? '' : v }}