在angular-ui-grid中设置动态列时出现问题

时间:2016-05-16 12:29:11

标签: javascript typescript angular-ui-grid

我正在尝试使用x列设置一个angular-ui-grid,具体取决于view.trend.getTagsList()返回的对象数。 $scope.addData()是一个每三秒调用一次的函数

        $scope.columns = [];


        $scope.setGridColumnWidth = function () {
            return (100 / view.trend.getTagsList().length + 1) + '%';
        }

        $scope.redoColumns = function () {

            $scope.columns = [];
            $scope.columns.push({
                displayName: 'TimeStamp', field: 'x', width: $scope.setGridColumnWidth(), sort: {
                    direction: uiGridConstants.DESC,
                    priority: 1
                }
            });

            for (var i = 0; i < view.trend.getTagsList().length; i++)
                $scope.columns.push({ displayName: view.trend.getTagsList()[i].getTitle(), field: 'y' + view.trend.getTagsList()[i].getId(), width: $scope.setGridColumnWidth() });
        }


        $scope.addData = function () {

            if (view.trend.getTagsList().length > $scope.columns.length) {
                $scope.redoColumns();
            }

            $scope.tslab_grid.data = view.trend.getTagsList()[0].getData();
        };

        $scope.tslab_grid = {
            enableGridMenu: true,
            enableColumnResizing: true,
            enableRowSelection: true,
            multiSelect: false,
            enableRowHeaderSelection: false,
            paginationPageSizes: 18,
            paginationPageSize: 18,
            enableVerticalScrollbar: 0,
            enableHorizontalScrollbar: 2,
            columnDefs: $scope.columns,
            data: null
        };

现在作为测试我只尝试使用包含view.trend.getTagsList()[0]列表的数据列表.getData()来获取单个对象{ x: Date, y: value }

我的问题是为什么angular-ui-grid不像$scope.redoColumns()那样重写列?我将displayNames设置为chrome中的'X'和'Y',而不是TimeStamp和view.trend.getTagsList()[i].getTitle()。还想添加字段上没有'默认'排序:'x'也是。

2 个答案:

答案 0 :(得分:0)

试试这个:

$scope.redoColumns = function () {
    var c = [];
    c.push({
        displayName: 'TimeStamp', field: 'x', width: $scope.setGridColumndWidth(), sort: {
            direction: uiGridConstants.DESC,
            priority: 1
        }
    });

    for (var i = 0; i < view.trend.getTagsList().length; i++)
        c.push({ displayName: view.trend.getTagsList()[i].getTitle(), field: 'y' + view.trend.getTagsList()[i].getId(), width: $scope.setGridColumnWidth() });

    $timeout(function(){
        $scope.columns = c;
    }, 0);
}

答案 1 :(得分:0)

我只是删除$scope.columns = [];函数中的redoColumn

来解决它