2016-05-16 28 views
0

我正在尝试使用x列设置角度 - 用户网格,具体取决于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 
     }; 

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

我的问题是为什么angular-ui-grid不重写$scope.redoColumns()中的列?我将displayNames改为'X'和'Y',而不是时间戳,不管view.trend.getTagsList()[i].getTitle()是什么。还想补充一点,在字段上没有'默认'排序:'x'。

+0

尽量把该呼叫并在$超时:$超时($ scope.redoColumns,0); //行为像队列 – Steffomio

+0

@Steffomio没有工作。 –

回答

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); 
} 
+0

我现在可以看到redoColumns()被调用,但首先它表示它不能识别$超时,然后当被移除时,我得到:TypeError:newRawData.forEach不是Grid.modifyRows上的函数.... –

+0

对不起,认为它是自我解释的,你必须在你的控制器头添加$ timeout。 – Steffomio

+0

仍然得到:'TypeError:newRawData.forEach不是Grid.modifyRows的函数...' –

0

我解决它通过只去除$scope.columns = [];redoColumn功能

+0

将$ scope数据总是放在一个大对象中以避免这些问题。例如$ scope.data.columns = []。现在您可以更换色谱柱而不会造成问题。其次,为避免代码混乱,可以将所有控制器$范围数据与一个$ scope.data = data;链接起来。在你的控制器中。 – Steffomio

+0

我只想清空$ scope.columns数组。正如你所看到的,它也是在大对象的函数外部声明的。 –

相关问题