【问题标题】:How to hide and show columns in Angularjs Google Chart如何在 Angularjs Google Chart 中隐藏和显示列
【发布时间】:2017-04-13 19:36:12
【问题描述】:

我有角度谷歌图表,每当用户单击删除 R1 按钮时,应删除 R1,当用户单击 R2 时,必须删除 R2。在这里,我有我的 [Fiddle][1] 我尝试使用 google chart 删除 removeColumn(['r1']) 的方法,就像 google chart 的使用方式一样,但没有奏效我需要在 angularjs google chart 中隐藏和显示列的方法。 如果您有任何想法,请告诉我。

[1]: http://jsfiddle.net/3crujkav/

【问题讨论】:

    标签: javascript angularjs charts google-visualization


    【解决方案1】:

    使用复选框可能会更容易...

    var data;
    var colors = ['red', 'blue', 'green'];
    $scope.$watch('datax', function(newValue, oldValue) {
      data = google.visualization.arrayToDataTable($scope.datax);
      colors.forEach(function (color, index) {
        data.setColumnProperty(index + 1, 'color', color);
      });
      drawChart();
    }, true);
    
    $scope.toggleCol = function() {
      drawChart();
    }
    
    function drawChart() {
      var chartColors = [];
      var chartColumns = [0];
      var view = new google.visualization.DataView(data);
    
      var checks = document.getElementsByTagName('input');
      for (var i = 0; i < checks.length; i++) {
        var seriesColumn = parseInt(checks[i].value);
        if (checks[i].checked) {
          chartColumns.push(seriesColumn);
          chartColors.push(data.getColumnProperty(seriesColumn, 'color'));
        }
      }
      view.setColumns(chartColumns);
      options.colors = chartColors;
      chart.draw(view, options);
    }
    

    forked fiddle


    编辑

    使用 DataView 将值列从字符串转换为数字...

    var data;
    var dataView;
    $scope.$watch('datax', function(newValue, oldValue) {
      data = google.visualization.arrayToDataTable($scope.datax);
      dataView = new google.visualization.DataView(data);
    
      // convert string columns to number
      var viewColumns = [0];
      $.each(new Array(data.getNumberOfColumns()), function (colIndex) {
        // skip first column
        if (colIndex === 0) {
          return;
        }
    
        viewColumns.push({
          calc: function (dt, row) {
            return parseInt(dt.getValue(row, colIndex));
          },
          label: data.getColumnLabel(colIndex),
          type: data.getColumnType(colIndex)
        });
      });
      dataView.setColumns(viewColumns);
    
    
      drawChart();
    }, true);
    

    然后使用新的dataView完成绘图...

    function drawChart() {
      var chartColors = [];
      var chartColumns = [0];
    
      // use dataView here
      var view = new google.visualization.DataView(dataView);
      ...
    

    【讨论】:

    • 嗨@WhiteHat 非常感谢您的回复先生,是的,它有效,但部分,先生,我只会在第一次通话时获取所有数据,所以假设我有 100 条记录,默认情况下我显示一条记录在图表中。现在,当用户选择任何人时,如果他取消选择,我应该将其添加到图表中,然后我会将其从图表中删除。简而言之,我不知道用户将从多选下拉列表中选择多少条记录,因此我们无法提前决定图表标题和颜色,一旦用户检查 R2,我将在他选择 R3 时将 r2 添加到图表中,我将从可用数据中添加 R3。
    • 这是有 6 条记录的小提琴,但可能有 20 条或 30 条或 40 条 jsfiddle.net/bg4r5hqy 你可以让它动态吗?非常感谢您的回答先生,给您一票。请在动态方面帮助我,然后再次接受它,谢谢先生。
    • jsfiddle.net/s8wg84Ln 这个只有在我为每条记录定义颜色时才有效,当用户选择任何 R1 检查时是否可以动态定义颜色?因为我将拥有所有数据,但只需要显示第一条记录,然后我不知道哪个用户点击了,然后我需要添加到图表中。
    • javascript / 浏览器不提供调色板——你必须从某个地方获取颜色——你想使用像this answer 提供的随机颜色生成器吗?
    • 非常棒的先生,我是认真的。先生,我还有一个疑问,后端数据以数组格式的数组出现,所有数据字符串都类似于这个 jsfiddle,你能告诉我一种将列格式化为数字或整数的方法,以便它可以工作吗? jsfiddle.net/8wuapp9h 实际上我需要的所有数字都是整数来处理这个图表。而且我最初无法定义它们,因为我们正在动态添加列,任何想法先生请帮助解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    相关资源
    最近更新 更多