2016-12-26 173 views
0

我試圖顯示一個json對象使用角度。該對象可能具有嵌套對象,所以我需要在運行時進行評估。 邏輯如下: 對於每個key-val(k,v): 如果v是對象,則:對於每個(k2,v2)在HTML_TD中添加另一個嵌套表。如果不是 - 需要在HTML_TD中打印該值從json對象使用anguarJS嵌套表

嵌套對象起作用。 問題:當v是一個對象時,我期望表達式的計算結果爲''並且什麼都不打印(因爲即時進入內部循環k2,v2),但是相反,即使v是一個對象,它也會打印出HTML_TD

代碼:

<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

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']); 
 
});
<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>

+0

的感謝! - 我定義了一個新的方法$ scope.is_object(),現在可以從html /角碼獲得。 – chenchuk

0

我覺得角解析器不允許在模板typeof功能。 但是你可以在控制器中定義一個方法來得到typeof。 例如: -

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

現在調用此方法在模板代碼:

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