【问题标题】:ng-grid expand and collaspe rowng-grid 展开和折叠行
【发布时间】:2014-06-30 06:54:21
【问题描述】:

我正在尝试为 ng-grid 实现展开和折叠行,基本上是我们在http://datatables.net/examples/api/row_details.html 所拥有的,如果您单击显示的“加号图标”更详细。

我在这里看到过类似的问题,但没有解决方案。 https://github.com/angular-ui/ng-grid/issues/517

有谁知道如何做到这一点?

感谢任何帮助。

var app = angularexpand('myApp', ['ngGrid']);
app.controller('MyCtrl', function($scope) {
  $scope.myData = [{
    somedata: "data to be expanded in another",
    moredata: 1
  }, {
    somedata: "b data to be expanded in another",
    moredata 2
  }, {
    somedata: "c data to be expanded in another",
    moredata: 3
  }, {
    somedata: "d data to be expanded in another",
    moredata: 4
  }, {
    somedata: "e data to be expanded in another",
    moredata: 5
  }];
  $scope.gridOptions = {
    data: 'myData'
  };

  $scope.expandRow = function(e) {
    e.preventDefault();
    var getData = {
      somedata: '',
      moredata: ''
    };
    $scope.gridOptions.selectItem(index, false);
    $scope.myData.splice(index + 1, 0, getData);
    $(this.row.elm).append('<div>' + this.row.entity.somedata + '</div>');
  };
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-controller="MyCtrl">
  <div class="gridStyle" ng-grid="gridOptions"></div>
  <button ng-click="expandRow($event)">add row</button>
</body>

【问题讨论】:

  • 我已经编辑了我的帖子,我基本上试图在一个虚拟行上附加一个 div,而不是完全有角度的方式,因为我使用附加它有时会起作用,有时它会导致特殊的行为
  • 一个工作小提琴会很棒!这是一个加载了 angularjs 的空文件:jsfiddle.net/ddNp9
  • 似乎 ng-grid 将对 3.0 进行重大改造,其中包括开箱即用的隐藏/显示等内容,现在我只使用已经包含所有这些功能的数据表。阿尔普感谢您的所有帮助。
  • @ninjamaster 如果您已经自行回答了问题,请不要犹豫发布并接受它。见stackoverflow.com/help/self-answer

标签: javascript jquery html angularjs ng-grid


【解决方案1】:

我从来没有用 ng-grid 做过这个,但是,用一个普通的表格实现了这个功能。您可以编写自定义指令来解决此问题。

以下内容应该可以解决问题。此示例未在 JSFiddle 中进行测试。这里的关键是使用 'ng-repeat-start' 和 'ng-repeat-end' 而不仅仅是 'ng-repeat'。

HTML:

<div ng-controller="MyCtrl">
    <table class="table dataTable no-hover">
	<tbody>	
	    <tr ng-repeat-start="row in rows" ng-init="ind = $index"> 
		<td ng-click="rowExpanded[row.name]=!rowExpanded[row.name]"></td>
                <td ng-repeat="val in row.vals" class="column"> </td>
            </tr>
            <tr id="rowexpand" ng-show="rowExpanded[row.name]" colspan="100%" ng-repeat-end></tr>
	</tbody>
    </table>
</div>

AngularJS 控制器:

var myApp = angular.module('myApp',[]);

function MyCtrl($scope) {
    $scope.rowExpanded=[];
    
    $scope.rows= [
        { "name": "row1",
         "vals" :[1, 2, 3, 4, 5], 
        },
         { "name": "row1",
         "vals" :[1, 2, 3, 4, 5], 
        }
    ]
        
}

【讨论】:

    【解决方案2】:

    目前 nggrid 不支持此功能 [issue #1111][1] 并且它正在 UIGrid 3.0 版本中实现。

    但是我找到了一种解决方法,这就是您可以尝试使用 rowTemplate 和一点点 jquery 在 nggrid 中实现的方法。希望这会有所帮助!

    行模板

    "< div class="**row**" >"
    
      "add column data"
    
      // expand or collapse image
    
        < div class=\"col-xs-1 col-md-1\" >< img "id='**showHide**_{{row.rowIndex}}' ng-src='src/img/{{**imgArrowRight**}}' ng-click=\"**rowExpand** (row.rowIndex);\" />< / div>"< /div>< div id='**expRowId**_{{row.rowIndex}}' style=\"display:none;\">< div class=\"**expData**\">< span ng-bind=\"**row.entity.Attr**\">< /span>
    //add whatever you want in the expanded row.< /div>< /div>
    
    //Defined customArray for handling dynamic row Toggle
    
     angular.forEach($scope.**gridData**, function(row,index) {
                    $scope.customArray[index] = true;
     });
    
    //row expand code
    
    $scope.**rowExpand** = function(**index**){
                            $scope.customArray[index] = $scope.customArray[index] === false ? true : false;
    
                            if($scope.customArray[index]){
                                $('#showHide_'+index).attr('src','src/assets/img/rigthIcon.gif');
                                $('#expRowId_'+index).hide();
                            }else{
                                $('#showHide_'+index).attr('src','src/assets/img/downIcon.gif');
                                $('#expRowId_'+index).show();
                            }
                        }
    

    另外,覆盖 ngRow 样式类

    .ngRow {
        position: relative !important;
    }
    

    【讨论】:

      猜你喜欢
      • 2017-03-06
      • 1970-01-01
      • 2016-08-25
      • 2023-03-04
      • 2018-12-13
      • 2013-06-06
      • 2016-02-02
      • 1970-01-01
      • 2021-12-10
      相关资源
      最近更新 更多