Я обнаружил две проблемы мэра с вашим кодом.Во-первых, запомните золотое правило: «Всегда анализируйте ваш JSON объект».
Почему мне нужно проанализировать мой JSON? Что ж, при использовании JSON.parse()
для JSON , полученного из массива, метод вернет массив JavaScript,вместо объекта JavaScript.
Но что это значит? Это означает, что JSON объекты представлены в виде строки JSON, которую JavaScript не может читать напрямую.
Хорошо, тогда как я могу его проанализировать? Синтаксис очень прост JSON.parse(text)
, где text
- строка для анализа в формате JSON, и он вернет объект, соответствующий заданному тексту JSON.
Директива ng-if
и атрибут $index
Теперь вы используете следующий код для определения ваших <th>
тегов:
<th ng-repeat="year in yearList[0].years"> {{year}}</th>
Что я думаюэто не правильно и ограничивает ваш контроль над значениями.
Я думаю, что лучшим решением будет сочетание атрибута ng-repeat
$index
с директивой ng-if
.Например:
<th ng-repeat="year in yearList" ng-if="$index == 0"> {{year.years}}</th>
Это даст вам больше контроля над значениями и тем, как вы хотите их отобразить.Это рабочий код для тех модификаций:
let app = angular.module("myApp", []);
app.controller("myCtrl", function($scope) {
let result = {
data: {
"json1": "[{\"years\":2018},{\"years\":2017},{\"years\":2016},{\"years\":2015}]",
"json2": "[{\"year5\":47.5100,\"year4\":50.9300,\"year3\":68.3700,\"year2\":65.2500,\"year1\":0.0000,\"reportFormula\":\"Total cost of sales/total sales\",\"reportRang\":\"<35%\",\"reportTypeDetail\":\"Cost of sales % of sales\"}]"
}
}
$scope.yearList = JSON.parse(result.data.json1);
$scope.dataList = JSON.parse(result.data.json2);
console.log('yearList', $scope.yearList);
console.log('dataList', $scope.dataList);
});
table {
border-collapse: collapse;
}
table, th, td {
border: 1px solid black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
<table>
<th ng-repeat="year in yearList" ng-if="$index == 0"> {{year.years}}</th>
<th ng-repeat="year in yearList" ng-if="$index == 1"> {{year.years}}</th>
<tr ng-repeat="data in dataList">
<td>{{data.reportTypeDetail}}</td>
<td>{{data.reportFormula}}</td>
</tr>
</table>
</div>