Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么嵌套ng栅格高度不起作用?_Javascript_Angularjs_Ng Grid - Fatal编程技术网

Javascript 为什么嵌套ng栅格高度不起作用?

Javascript 为什么嵌套ng栅格高度不起作用?,javascript,angularjs,ng-grid,Javascript,Angularjs,Ng Grid,我有一个嵌套的ng网格 var faculty = angular.module('faculty', ['ngGrid']); faculty.controller('facultycontroller', function facultycontroller($scope, $http, $window) { $scope.facdata = [{ examname: 'test' },{ examname: 'test2' }]; $sc

我有一个嵌套的ng网格

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

faculty.controller('facultycontroller', function facultycontroller($scope, $http, $window)
{

$scope.facdata = [{

    examname: 'test'       
  },{

    examname: 'test2'
  }];

  $scope.gridOptions = {

    data: 'facdata',

    plugins: [new ngGridFlexibleHeightPlugin()],

    columnDefs: [
      {field: 'examname',displayName: 'Exam Name'},
      {field: '', displayName: 'Subjects' , cellTemplate: '<div  ng-grid="gridOptions1"  ></div>'
    }]
  };
$scope.fac1data = [{
    abc: 'value',
    def: 'value2'
  }, {

    abc: 'value3',
    def: 'value4'
  }, {
    abc: 'value1',
    def: 'value4'
  }, {
    abc: 'value2',
    def: 'value4'
  }, {
    abc: 'value34',
    def: 'value4'
  }, {

    abc: 'value34',
    def: 'value4'
  }, {
    abc: 'value23',
    def: 'value14'
  }, {
    abc: 'value433',
    def: 'value5554'
  }, {

    abc: 'value3555',
    def: 'value4878'
  }
  ];
$scope.gridOptions1 = {

   plugins: [new ngGridFlexibleHeightPlugin()],

    data: 'fac1data',

    columnDefs: [

      {  field: 'abc',displayName: 'abc'},

      { field: 'def',displayName: 'def'}]
  }
});
var faculty=angular.module('faculty',['ngGrid']);
控制器('facultycontroller',函数facultycontroller($scope,$http,$window)
{
$scope.facdata=[{
examname:“测试”
},{
examname:'test2'
}];
$scope.gridOptions={
数据:'facdata',
插件:[新的ngGridFlexibleHeightPlugin()],
columnDefs:[
{字段:'examname',显示名称:'Exam Name'},
{字段:“”,显示名称:'Subjects',单元格模板:'
}]
};
$scope.fac1data=[{
abc:'价值',
定义:“值2”
}, {
abc:‘价值3’,
定义:“值4”
}, {
abc:‘价值1’,
定义:“值4”
}, {
abc:‘价值2’,
定义:“值4”
}, {
abc:‘价值34’,
定义:“值4”
}, {
abc:‘价值34’,
定义:“值4”
}, {
abc:‘价值23’,
定义:“值14”
}, {
abc:‘价值433’,
def:'value5554'
}, {
abc:‘价值3555’,
def:'value4878'
}
];
$scope.gridOptions1={
插件:[新的ngGridFlexibleHeightPlugin()],
数据:“fac1data”,
columnDefs:[
{字段:'abc',显示名称:'abc'},
{字段:'def',显示名称:'def'}]
}
});
见 我需要一目了然地显示所有嵌套的数据网格。我需要一目了然地显示子ng网格数据(无垂直滚动)。但嵌套栅格高度不起作用。我的欲望网格如下


这只是一个例子,因为每行都有相同的子行数

<body ng-controller="facultycontroller">
  <h1>Hello Plunker!</h1>
  <div ng-grid="gridOptions" ></div>
</body>

你好,普朗克!
var faculty=angular.module('faculty',['ngGrid']);
控制器('facultycontroller',函数facultycontroller($scope,$http,$window){
$scope.facdata=[{
examname:“测试”
},{
examname:'test2'
}];
$scope.rowHeight=30;
$scope.updateGrid=function(){
$scope.gridOptions={
数据:'facdata',
行高:$scope.fac1data.length*$scope.rowHeight,
columnDefs:[
{字段:'examname',显示名称:'Exam Name'},
{字段:“”,显示名称:'Subjects',单元格模板:'
}]
};
}
$scope.fac1data=[{
abc:'价值',
定义:“值2”
}, {
abc:‘价值3’,
定义:“值4”
}, {
abc:‘价值1’,
定义:“值4”
}, {
abc:‘价值2’,
定义:“值4”
}, {
abc:‘价值34’,
定义:“值4”
}, {
abc:‘价值34’,
定义:“值4”
}, {
abc:‘价值23’,
定义:“值14”
}, {
abc:‘价值433’,
def:'value5554'
}, {
abc:‘价值3555’,
def:'value4878'
}
];
$scope.gridOptions1={
头灯:0,
数据:“fac1data”,
行高:$scope.rowHeight,
columnDefs:[
{字段:'abc',显示名称:'abc'},
{字段:'def',显示名称:'def'}]
}
$scope.updateGrid();
$scope.fac1data=[{
abc:‘价值2’,
定义:“值4”
}, {
abc:‘价值34’,
定义:“值4”
}, {
abc:‘价值34’,
定义:“值4”
}, {
abc:‘价值23’,
定义:“值14”
}, {
abc:‘价值433’,
def:'value5554'
}, {
abc:‘价值3555’,
def:'value4878'
}
];
$scope.updateGrid();
});

编辑:
若主行有不同的子行计数,则它不起作用。我只有一个想法。必须是fork ui网格,并将其重新设计为自动高度。官方的ui网格是在gridTemplate.html上设计固定高度,并使用绝对顶部位置。

ng网格不是为嵌套网格设计的:甚至是动态高度单元格

如果查看ng grid的模板
ui grid.html
,您会发现大小是以像素为单位固定的:

  height: {{ grid.options.rowHeight }}px;
请参见 这个CSS类嵌入到模板中,没有空间过度写入“auto”。由于网格是用
Div
而不是
表构建的,如果每个
单元格Div
都可以自由决定自己的行为,那么行和列之间的表格关系就很困难了。所以嵌套网格是一个相当大的挑战


你可以通过类似嵌套网格的技巧获得你想要的效果:

看见 折叠网格

注意:已添加插入符号以显示父行是可扩展的。我没有为没有子行的父行添加隐藏插入符号的逻辑

扩展网格

看见
更改JSon以包含测试、名称和D分数列。使用列作为测试名称或学生名称/分数。将父id用于子项,并将id提供给父项:

$scope.facdata  = [{test: "Basic Physics Test", parentId:0,id:1,expanded:true},
                 {name: "NAME", Score: "SCORE",parentId:1,expanded:false},
                 {name: "John", Score: 77,parentId:1,expanded:false},
                 {name: "Jacob", Score: 66,parentId:1,expanded:false},
                 {name: "Jenny", Score: 94,parentId:1,expanded:false},
                 {test: "Advanced Physics Test",id:2, parentId:0,expanded:true},
                 {name: "NAME", Score: "SCORE",parentId:2,expanded:false},
                 {name: "Freddy", Score: 94,parentId:2,expanded:false},
                 {name: "Samantha", Score: 38,parentId:2,expanded:false},
                 {name: "Judy", Score: 100,parentId:2,expanded:false}
                 ];
在网格选项中设置
rowTemplate
以对展开的
字段的子项使用
ng show
指令

$scope.gridOptions = { 
    data: 'facdata',
    columnDefs: [{field: 'id',displayName:'',width:20,
    cellTemplate:'<div ng-show="row.getProperty(\'id\')" ng-click="toggleExpansion(row.getProperty(col.field))"><i class="fa fa-caret-right"></i></div>'},
                {field: 'test', displayName: ''},
                {field: 'name', displayName:''},
                 {field:'Score', displayName:'', 
                 cellTemplate: '<div class="ngCellText">{{row.getProperty(col.field)}}</div>'}],
    rowTemplate:'<div style="width: 600px" ng-show="row.getProperty(\'expanded\')"><div ng-repeat="col in renderedColumns" class="ngCell ">' +
                       '<div ng-cell></div> </div></div>'
$scope.gridOptions={
数据:'facdata',
columnDefs:[{field:'id',displayName:'',宽度:20,
单元格模板:'},
{字段:'test',显示名称:'},
{字段:'name',显示名称:'},
{字段:'Score',显示名称:“”,
cellTemplate:{{row.getProperty(col.field)}}}}],
行模板:“”+
' '
添加ToggleSubReport函数以管理显示嵌入数据

$scope.ToggleSubReport  = function(id) {
  for (var i=0;i<$scope.facdata.length;++i){
    if ($scope.facdata [i].parentId ===id){
      $scope.facdata [i].expanded = !$scope.facdata [i].expanded;
    }
  }
}
$scope.ToggleSubReport=函数(id){

对于(var i=0;iI),我知道您想要做什么,但它根本不受支持。已请求:建议的解决方案是“将行高度设置为足够大”请不要包含神秘的短URL。它们很可怕。我发布plunker或fiddle链接,它无法发送,我尝试使用“代码”按钮,它不起作用。代码缩进了4个空格。我明白了,我不能只发布plunker或fiddle链接,它需要一些代码。谢谢你的帮助。然后发布一些代码?我编辑了你的问题并从中复制粘贴了代码您的Plunker。谢谢,您的答案适用于子网格。但我的对象更复杂。因此我需要实现主细节网格/嵌套网格概念。我的对象如下…公共类顺序{public string OrderNO(get;set;)public DateTime OrderDate(get;set;)public Lis
$scope.ToggleSubReport  = function(id) {
  for (var i=0;i<$scope.facdata.length;++i){
    if ($scope.facdata [i].parentId ===id){
      $scope.facdata [i].expanded = !$scope.facdata [i].expanded;
    }
  }
}