角度Ui-Grid多级嵌套

时间:2016-06-27 07:38:00

标签: angularjs angular-ui-grid ui-grid

我正在使用Angular Ui-grid。试图在其中实现多级嵌套。有人已经在uiGrid github提出了这个问题。但是这个解决方案似乎没有用。

我更改了this之类的JSON。我正在尝试形成嵌套的子网格。

以下是我的代码

  $scope.gridOptions = {
    expandableRowTemplate: 'expandableRowTemplate.html',
    enableGridMenu: true,
    expandableRowHeight: 150,
    paginationPageSizes: [5, 10, 15],
    paginationPageSize: 5,
    //subGridVariable will be available in subGrid scope
    expandableRowScope: {
      subGridVariable: 'subGridScopeVariable'
    }
  }

  $scope.gridOptions.columnDefs = [
    { name: 'id', enableHiding: false },
    { name: 'name' },
    { name: 'age' },
    { name: 'address.city' }
  ];

  $http.get('http://private-7a7085-getfriends1.apiary-mock.com/getfriends')
    .success(function (data) {
      for (i = 0; i < data.length; i++) {
        //for(i = 0; i < 50; i++){
        data[i].subGridOptions = {
          columnDefs: [{ name: "Id", field: "id" }, { name: "Name", field: "name" }, { name: "Age", field: "id" }, { name: "Address", field: "name" }],
          data: data[i].friends,
          expandableRowTemplate: 'expandableRowTemplate1.html',
          enableGridMenu: true,
          expandableRowHeight: 150
        }

        for (j = 0; j < data[i].friends.length; j++) {
          data[i].subNestedGridOptions = {
            columnDefs: [{ name: "Id", field: "id" }, { name: "Name", field: "name" }, { name: "Age", field: "id" }, { name: "Address", field: "name" }],
            data: data[i].friends[j].friends
          }
        }
      }
      $scope.gridOptions.data = data;
    });

和第二级嵌套html(expandableRowTemplate1.html)看起来像

<div ui-grid="row.entity.subNestedGridOptions" style="height:150px;"></div>

当我将数据传递给ui-grid以获得第二级嵌套网格时,它会抛出未定义的内容。

到目前为止,是否有人成功实施具有2或3级以上的可扩展UI网格。如果是,请分享plunker或小提琴或详细解释将非常有用!

1 个答案:

答案 0 :(得分:0)

我现在有这个工作。我假设你已经构建了适当的数据来绑定3个级别。我假设你有一个2级网格工作(父网格的行展开以显示子网格)。以下是我为了让它发挥作用而添加的几个关键部分:

顶级网格在div标签中具有指令ui-grid-expandable,用于定义它。这位于我的html视图中。

<div ui-grid="gridThreeLayer" ui-grid-expandable></div>

顶级网格在其gridOptions(angularJS)中定义了expandableRowTemplate。

$scope.gridThreeLayer = { ........
expandableRowTemplate: '..your path.../expandableRowTemplate.html' }

顶级网格的expandableRowTemplate将包含一个div标签,用于定义另一个&#34; ui-grid&#34;并且有指令&#34; ui-grid-expandable&#34;。

<div ui-grid="row.entity.subGridOptions" ui-grid-expandable></div>

当数据绑定在angularJS中时,第二级网格的subGridOptions和columnDefs动态构建(对我来说是$ http.get())。此时,您需要在该第二级网格上指定expandableRowTemplate属性,该属性告诉它展开并显示第三级网格。

for (i = 0; i < response.data.length; i++) {
response.data[i].subGridOptions = { .....
columnDefs: [ ............],

data: response.data[i].IP, // note that this is my 2nd level of data objects - yours will differ
expandableRowTemplate: 'AngularApp/Templates/MultiLevelTemplate.html

第二级网格的expandableRowTemplate需要定义一个带有&#34; ui-grid&#34;的div标签,指示网格为每一行渲染一个嵌套网格。它不需要扩展指令(但你可以添加一个进入4级深度)。我叫做MultiLevelTemplate。

<div ui-grid="row.entity.subGridOptions"></div>

现在,在同一个angularJS块中,您可以动态构建每一行的gridOptions和columnDef,您需要通过该级别的数据进行另一级迭代。这将允许您定义第3级网格的subGridOptions和columnDefs。所以你在&#34; i&#34;循环,并启动&#34; x&#34;循环在其中。请注意,在设置数据源时,它使用我自己的3级数据对象。你需要在那里使用它。

for (x = 0; x < response.data[i].IP.length; x++) {
response.data[i].IP[x].subGridOptions = {
columnDefs: [........],
response.data[i].IP[x].subGridOptions.data = response.data[i].IP[x].BOM; // my data

如果您执行以上所有操作,如果您的数据设置正确,它应该可以正常工作。