在 ag-grid 中显示嵌套 json
displaying nested json in ag-grid
我正在使用 Angular 网格 (ag-grid) 来显示数据。我正在尝试在我的 angular 网格中显示嵌套的 json 数据。但是我没有成功。
下面是示例 json 数据和 colDef。请建议为什么点运算符与 jqgrid 不同,无法使用嵌套的 json 字段映射网格列。
var app = angular.module('myApp', ['ngGrid']);
app.controller('MyCtrl', ['$scope', '$http',
function($scope, $http) {
$scope.myData = [{
"defaultColumns1": {"region":"PA"},
"defaultColumns2": {"LocationName": "loc1",
"LegalName": "legName1"
}
},
{
"defaultColumns1": {"region":"PB"},
"defaultColumns2": {"LocationName": "loc2",
"LegalName": "legName2"
}
}];
$scope.gridOptions = {
data: 'myData',
columnDefs: [{
field: 'defaultColumns1.region',
displayName: 'Region'
}, {
field: 'defaultColumns2.LocationName',
displayName: 'Location',
headerGroup: 'address'
}, {
field: 'defaultColumns2.LegalName',
displayName: 'Legal Name',
headerGroup: 'address'
}],
enableColumnResize: true,
groupHeaders : true
}
}]);
index.html
<!DOCTYPE html>
<html ng-app="myApp">
<head lang="en">
<meta charset="utf-8" />
<title>Custom Plunker</title>
<link rel="stylesheet" href="../dist/ag-grid.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.js"> </script>
<script src="http://code.angularjs.org/1.2.15/angular.js"></script>
<script src="../dist/ag-grid.min.js"></script>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet" />
<link rel="stylesheet" type="text/css" href="style.css" />
<script type="text/javascript" src="main.js"></script>
</head>
<body ng-controller="MyCtrl">
<div class="gridStyle" ag-grid="gridOptions"></div>
</body></html>
您处理数据的方式存在一些问题。
$scope.myData 是一个对象数组,因此您需要对其进行迭代或按索引挖掘数据。
另外,您的 $scope.gripOptions 不太正确。我刚刚关注了 ag-grid docs
看看这个更新后的 plunker。该代码非常基本,但它可以满足我的需求。您始终可以创建一个函数来遍历数组(将其留作作业:-))
$scope.myData = [{
"defaultColumns1": {
"region": "PA"
},
"defaultColumns2": {
"LocationName": "loc1",
"LegalName": "legName1"
},
"name": "name1"
}, {
"defaultColumns1": {
"region": "PB"
},
"defaultColumns2": {
"LocationName": "loc2",
"LegalName": "legName2"
},
"name": "name2"
}];
var columnDefs = [{
headerName: 'Region',
field: 'region'
}, {
headerName: 'Location',
field: 'location'
}, {
headerName: 'Legal name',
field: 'legal_name'
}]
var rowData = [{
region: $scope.myData[0].defaultColumns1.region,
location: $scope.myData[0].defaultColumns2.LocationName,
legal_name: $scope.myData[0].defaultColumns2.LegalName
}, {
region: $scope.myData[1].defaultColumns1.region,
location: $scope.myData[1].defaultColumns2.LocationName,
legal_name: $scope.myData[1].defaultColumns2.LegalName
}, ]
$scope.gridOptions = {
columnDefs: columnDefs,
rowData: rowData
};
看看 $scope.gridOptions 现在的构建方式(如文档中所建议的那样。)
希望对您有所帮助。
ag-grid field属性只能引用数据行的一个属性,但是valueGetter属性允许表达式。所以,虽然
field: 'defaultColumns1.region'
不行,切换到
valueGetter: 'data.defaultColumns1.region'
会很好用。从你那里分叉出来的样本 plunker 在 http://plnkr.co/edit/8enzrjt2MQwfa8VjGaIy?p=preview
我正在使用 Angular 网格 (ag-grid) 来显示数据。我正在尝试在我的 angular 网格中显示嵌套的 json 数据。但是我没有成功。
下面是示例 json 数据和 colDef。请建议为什么点运算符与 jqgrid 不同,无法使用嵌套的 json 字段映射网格列。
var app = angular.module('myApp', ['ngGrid']);
app.controller('MyCtrl', ['$scope', '$http',
function($scope, $http) {
$scope.myData = [{
"defaultColumns1": {"region":"PA"},
"defaultColumns2": {"LocationName": "loc1",
"LegalName": "legName1"
}
},
{
"defaultColumns1": {"region":"PB"},
"defaultColumns2": {"LocationName": "loc2",
"LegalName": "legName2"
}
}];
$scope.gridOptions = {
data: 'myData',
columnDefs: [{
field: 'defaultColumns1.region',
displayName: 'Region'
}, {
field: 'defaultColumns2.LocationName',
displayName: 'Location',
headerGroup: 'address'
}, {
field: 'defaultColumns2.LegalName',
displayName: 'Legal Name',
headerGroup: 'address'
}],
enableColumnResize: true,
groupHeaders : true
}
}]);
index.html
<!DOCTYPE html>
<html ng-app="myApp">
<head lang="en">
<meta charset="utf-8" />
<title>Custom Plunker</title>
<link rel="stylesheet" href="../dist/ag-grid.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.js"> </script>
<script src="http://code.angularjs.org/1.2.15/angular.js"></script>
<script src="../dist/ag-grid.min.js"></script>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet" />
<link rel="stylesheet" type="text/css" href="style.css" />
<script type="text/javascript" src="main.js"></script>
</head>
<body ng-controller="MyCtrl">
<div class="gridStyle" ag-grid="gridOptions"></div>
</body></html>
您处理数据的方式存在一些问题。 $scope.myData 是一个对象数组,因此您需要对其进行迭代或按索引挖掘数据。 另外,您的 $scope.gripOptions 不太正确。我刚刚关注了 ag-grid docs
看看这个更新后的 plunker。该代码非常基本,但它可以满足我的需求。您始终可以创建一个函数来遍历数组(将其留作作业:-))
$scope.myData = [{
"defaultColumns1": {
"region": "PA"
},
"defaultColumns2": {
"LocationName": "loc1",
"LegalName": "legName1"
},
"name": "name1"
}, {
"defaultColumns1": {
"region": "PB"
},
"defaultColumns2": {
"LocationName": "loc2",
"LegalName": "legName2"
},
"name": "name2"
}];
var columnDefs = [{
headerName: 'Region',
field: 'region'
}, {
headerName: 'Location',
field: 'location'
}, {
headerName: 'Legal name',
field: 'legal_name'
}]
var rowData = [{
region: $scope.myData[0].defaultColumns1.region,
location: $scope.myData[0].defaultColumns2.LocationName,
legal_name: $scope.myData[0].defaultColumns2.LegalName
}, {
region: $scope.myData[1].defaultColumns1.region,
location: $scope.myData[1].defaultColumns2.LocationName,
legal_name: $scope.myData[1].defaultColumns2.LegalName
}, ]
$scope.gridOptions = {
columnDefs: columnDefs,
rowData: rowData
};
看看 $scope.gridOptions 现在的构建方式(如文档中所建议的那样。)
希望对您有所帮助。
ag-grid field属性只能引用数据行的一个属性,但是valueGetter属性允许表达式。所以,虽然
field: 'defaultColumns1.region'
不行,切换到
valueGetter: 'data.defaultColumns1.region'
会很好用。从你那里分叉出来的样本 plunker 在 http://plnkr.co/edit/8enzrjt2MQwfa8VjGaIy?p=preview