为动态生成的角度ui网格设置列宽

时间:2016-12-27 20:10:55

标签: javascript angularjs angular-ui-grid

我正在尝试为网格设置列的宽度。

我从api调用中获取数据,并稍微重建它以显示在网格中。这样可行。我永远不知道我的网格中有多少列,这就是我将$scope.gridOptions.columnDef定义为空数组的原因,在这种情况下,当网格获取数据时,它会动态呈现列,但在这种情况下如何设置列宽? / p>

代码:

 $scope.gridOptions = {
            enableGridMenu: false,
            paginationPageSizes: [10, 25, 50],
            paginationPageSize: 10,

            enableFiltering: false,
            rowHeight: 40,
            // selection
            enableRowSelection: true,
            enableRowHeaderSelection: false,
            multiSelect: false,
            modifierKeysToMultiSelect: false,
            noUnselect: true,
            columnDefs: [],
            onRegisterApi: function (gridApi) {
                $scope.gridApi = gridApi;
            }

        };

        $scope.gridOptions.columnDefs = [];

        $scope.$watch('filter', function (newVal, oldVal) {

            var array = [];

            if (typeof newVal !== 'undefined') {
                param.query = newVal;

                lovServices.events(param)
                    .then(function (response) {

                        var events = response.events;

                        angular.forEach(events, function (field) {

                            var custom = field.eventProperties;

                            var tempObj = {};

                            tempObj.title = field.title;
                            tempObj.description = field.description;
                            tempObj.studyName = field.studyName;

                            for (var i = 0; i < custom.length; i++){

                                tempObj[custom[i].name] = custom[i].value
                            }

                            array.push(tempObj);
                        });

                        $scope.gridOptions.data = array;

                        for (var i = 0; i < $scope.gridOptions.columnDefs.length; i++) {
                            $scope.gridOptions.columnDefs[i].width = '*';
                        }

                        $scope.gridApi.core.notifyDataChange(uiGridConstants.dataChange.COLUMN);
                        $scope.gridApi.core.refresh()

                    })
            }
        });

如您所见,代码清晰,控制台中没有错误,我的宽度定义不起作用。

那我错过了什么?我感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

尝试将width属性设置为普通数字百分比值。 示例:50或'50%';

答案 1 :(得分:1)

所以我在初始化数据后检查了控制台$ scope.gridOptions.columnsDef。它是一个空数组,所以我在init之后设置了间隔,它终于有效了!

我的代码如下:

  $scope.gridOptions.data = array;

                    $interval(function () {
                        for (var i = 0; i < $scope.gridOptions.columnDefs.length; i++) {
                            $scope.gridOptions.columnDefs[i].width = '20%';

                        }

                        $scope.gridApi.core.notifyDataChange(uiGridConstants.dataChange.COLUMN);
                        $scope.gridApi.core.refresh()
                    })
滚动的

css:

#cp-grid .ui-grid-render-container-body .ui-grid-viewport {
    overflow-x: scroll !important;
}