如何在动态生成的angular-ui-grid中设置列的默认宽度?

时间:2016-01-19 18:29:42

标签: angularjs angular-ui-grid

我在以下控制器中动态创建了许多ui-grid实例,并希望每个网格中的每个列的最小宽度为150px。每个网格的数据和列数不同。

起初我尝试做过这样的事情:

<div ng-controller="displayResponses">
    <ul class="list-group">
      <li class="list-group-item" ng-repeat="x in responses">
        <div ui-grid="{minimumColumnSize: 150, data: x.data}" class="grid"></div>
      </li>
    </ul>
</div>

但它只显示挤进网格现有空间的所有列,没有水平滚动条。作为尝试修复,我尝试了以下内容:

<div ng-controller="displayResponses">
    <ul class="list-group">
      <li class="list-group-item" ng-repeat="x in responses">
        <div ui-grid="x.gridOptions" class="grid"></div>
      </li>
    </ul>
</div>

现在,每个响应都有自己的gridOptions元素,而该元素又有一个定义minWidth的columnDefs字段;类似于以下文档中的示例:

http://ui-grid.info/docs/#/tutorial/213_auto_resizing

换句话说,如果服务器现在返回响应[],并且每个响应都包含:

,我可以使它工作
response.columnDefs : [
    {"name":"myfieldname", minWidth: 150},
    {"name":"myfieldname2", minWidth: 150}
];

问题是,我不想将minWidth编码到我的服务器端逻辑中。在尝试分离视图和模型时,移动columnDefs定义一直是一个挑战。

github用户提到类似的问题: https://github.com/angular-ui/ui-grid/issues/3639

,虽然提议的解决方案尚未实施。

当前代码

在当前正在运行的代码中,服务器返回response.columnDefs,我使用一个名为responseManager的服务,该服务在$ http.post(...)收到响应后调用。 responseManager.setResponses(data)将每个响应的gridOptions设置为:

setResponses: function (data) {
  angular.forEach(data, function(response){
    response.gridOptions = { paginationPageSizes: [10, 25, 50], paginationPageSize: 10, columnDefs: response.column_defs, data: response.rows };
  });
  responses = data;
}

理想情况下,我想通过查看每个响应并定义columnDefs数组来在responseManager中设置columnDefs。但是当我在responseManager服务中创建一个columnDefs数组并将其分配给响应数据模型时,我收到一个错误:

TypeError: Cannot read property 'data' of undefined
at new <anonymous> (ui-grid.js:3130)
at Object.invoke (angular.js:4450)
at extend.instance (angular.js:8999)
at nodeLinkFn (angular.js:8109)
at delayedNodeLinkFn (angular.js:8398)
at compositeLinkFn (angular.js:7541)
at compositeLinkFn (angular.js:7545)
at publicLinkFn (angular.js:7416)
at boundTranscludeFn (angular.js:7560)
at controllersBoundTransclude (angular.js:8177)

。我读过关于可能使用&#34;编译&#34;更新模型,但我现在还不确定。

任何人都知道如何做到这一点?我确定我错过了一些明显的东西。

0 个答案:

没有答案