我遇到了一些问题,为一个简单的谷歌条形图获得一致的大小 .

我有一个显示一些信息的指令,我想要包含数据的条形图

app.directive('prodpercentiles', function($compile, $http, $timeout) {
return {
  scope: {
    'data': '=',
    'help': '@',
    'id': '@',
    'cardtitle': '@',
  },
  templateUrl: '/static/prod_percentiles.html',
  controller: function ($scope, $element) {
    $scope.elem = angular.element($('#'+$scope.id)).find('#chart')[0];

    $scope.draw_chart = function() {
      var data = new google.visualization.DataTable();
      $scope.chart_obj = new google.charts.Bar($scope.elem);
      //console.log($scope.elem)
      data.addColumn('string','Percentile')
      data.addColumn('number','Product Count')
      $scope.data.percentiles.sort(function(a,b) { return a.val > b.val;}).forEach(function(x) {
        data.addRow([x.val.toString(), x.count])
      })
      var options = {
        legend: { position: 'none'},
        title: 'Number of products in each percentile',
      };
      $scope.chart_obj.draw(data, options);
    }

页面上有两个具有不同数据的指令 . 我看到的行为是,在初始加载时,每个条形图的高度和宽度是默认值 . 我能够以不同的尺寸显示图表的唯一方法是将高度/宽度静态输入到选项中 . 我想避免这种情况,由于某些原因,我正在使用我正在应用于#chart元素的样式 .

但是,我已经设置了一个调整大小的侦听器来重新绘制图表,它工作正常:

$(window).resize(function(){$scope.draw_chart()});

因此,在调整窗口大小后,两个图表看起来都很好 . 现在,我已经在此沉没了足够的时间,我只想完成这个 . 我试图通过在加载图表时强制调整大小来解决这个问题 .

angular.element(window).trigger('resize')

有一个UI按钮可以从表格切换到条形图,它会调用draw_chart并调整大小 . 这应该是一个充分的工作 .

但是,现在当我在其中一个指令上切换条形图时,它实际上将图表固定在另一个指令中,反之亦然 . 有谁知道这可能是什么?我真的没有想法 . 如果我实际调整主浏览器窗口的大小,它们看起来都很好 .

这里真正的问题是图表在初始加载时没有正确调整大小 . 我试图在那里稍微延迟,以防DOM在尝试渲染时没有完全存在,但它没有帮助 .

第二个问题是调整大小 .