我在以下控制器中动态创建了许多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;更新模型,但我现在还不确定。
任何人都知道如何做到这一点?我确定我错过了一些明显的东西。