【问题标题】:displaying nested json in ag-grid在 ag-grid 中显示嵌套的 json
【发布时间】:2015-09-30 08:43:42
【问题描述】:

我正在使用 Angular Grid (ag-grid) 来显示数据。我正在尝试在我的角度网格中显示嵌套的 json 数据。但我没有成功。

下面是示例 json 数据和 colDefs。请建议为什么点运算符不像 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>

【问题讨论】:

  • 你的html请。 plunkr 会很有帮助。
  • @Jax 我已经添加了 html 代码。好心,看看
  • 我在这一点上受到了严重打击。有人可以建议我解决我的问题。这将是一个很大的帮助..
  • 你能创建一个小提琴 o plunkr

标签: javascript json angularjs angular-grid


【解决方案1】:

ag-grid field 属性只能引用数据行的一个属性,但 valueGetter 属性允许表达式。所以,虽然

field: 'defaultColumns1.region'

行不通,切换到

valueGetter: 'data.defaultColumns1.region'

会正常工作。从你那里分叉的样本 plunker 位于 http://plnkr.co/edit/8enzrjt2MQwfa8VjGaIy?p=preview

【讨论】:

  • 如果defaultColumns1 是一个数组而我只需要defaultColumns1[0].fieldName,你有什么建议?
  • Simplest 可能是一个值获取器,即valueGetter: 'defaultColumns1[0].fieldName'(假设“defaultColumns”是您的 node.data 上的一个数组。对于更复杂的工作,我发现自定义编辑器非常方便 - 那些让你编写一个初始化程序、一个 gui 构造函数、进入和退出处理程序等。
  • 从我尝试做的领域:'defaultColumns1.region' 也将在最新的 AG-grid 中工作。
【解决方案2】:

您处理数据的方式存在一些问题。 $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 的构造方式(如文档中所建议的那样。)

希望对你有帮助。

【讨论】:

  • 感谢您的友好回复。我明白你的意思。我一直在寻找将 json 字段直接映射到行数据,而不像您上面解释的那样迭代 json 对象。当我们使用 jqgrid 时,我们可以通过在 colDefs 中定义路径直接将嵌套的 json 对象映射到行数据。我一直在寻找类似的东西。我认为,ag-grid 不支持映射嵌套的 json 对象映射。
  • 我从服务器获取嵌套的 json 对象。仅出于说明目的,我在上面的示例中提供了简单的嵌套 json 对象。
  • 所提供的答案回答了最初发布的问题。如果是这样的话,接受答案是习惯性的。如果您有不同的用例,那么您应该提出一个新问题。
  • 感谢您的快速回复,Jax :) 我会接受这个答案。
  • 我已经改变了服务器端的数据结构并使用了你的方法,问题就解决了。非常感谢:)
猜你喜欢
  • 2016-09-04
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 2021-02-20
  • 2018-01-16
相关资源
最近更新 更多