2

我正在尝试使用 ha angularJs 版本的 easypiechart 在值更改时创建简单的刻度颜色。当值改变时颜色应该改变,从红色到绿色。

在基于 jquery 的旧 easypiechart 版本中,这可以通过执行类似操作来实现:

barColor: function(percent) {
    percent /= 100;
    return "rgb(" + Math.round(255 * (1-percent)) + ", " + Math.round(255 * percent) + ", 0)";
}

我做了一个 plunker 来证明我正在尝试做的事情,优点是有角度的,缺点是 jquery:http ://plnkr.co/edit/7yQ1SiIPHFh62yxwnW9e?p=preview

4

1 回答 1

0

我和你有同样的问题,除了我在我自己定义的更复杂的指令中使用简单的饼图。我花了很长时间弄清楚如何在范围内传递百分比和选项模型变量,并在外部指令的属性发生更改时进行更改。正因为如此,我放弃了 easyPieChart 的 Angular 版本并返回到 jQuery 版本(这可能是我的而不是 easypiechart 指令,因为我是 angular 的新手,所以我对一些概念感到困惑)。

这是我的代码的简化版本,显示了我所做的:

我的指令 infoBox.js:

'use strict';

commonApp.directive('infoBox', function () {
  return {
    restrict: 'E',
    replace: true,
    scope: {
      percent: '@',
      text: '@',
      content: '@',
      textIsNumber: '@'
    },
    templateUrl: '/directives/infoBox.html',
    controller: 'infoBoxController',
    }
  };
});

我的模板 infoBox.html

<div class="infobox">
  <div class="infobox-progress">
    <div class="easy-pie-chart percentage" data-percent="{{percent}}" data-size="50">
      <span class="percent">{{percent}}</span>%
    </div>
  </div>
  <div class="infobox-data">
    <span ng-class="{'infobox-data-number': textIsNumber, 'infobox-text': !textIsNumber}" class="infobox-data-number">{{text}}</span>

    <div class="infobox-content">
      {{content}}
    </div>
  </div>
</div>

还有我的控制器 infoBoxController.js

'use strict';

commonApp.controller('infoBoxController',
  function infoboxController($scope, $log, $attrs, $element) {
    var init = function () {
      var $chart = $element.find('.easy-pie-chart.percentage')[0];
      var barColor = $element.data('color') || (!$element.hasClass('infobox-dark') ? $element.css('color') : 'rgba(255,255,255,0.95)');
      var trackColor = barColor == 'rgba(255,255,255,0.95)' ? 'rgba(255,255,255,0.25)' : '#E2E2E2';
      $($chart).easyPieChart({
        barColor: barColorFunction,
        trackColor: trackColor,
        scaleColor: false,
        lineCap: 'butt',
        lineWidth: parseInt(size / 10),
        animate: /msie\s*(8|7|6)/.test(navigator.userAgent.toLowerCase()) ? false : 1000,
        size: size
      });
    };
    var barColorFunction = function (percent) {
      if (percent <= 100) {
        return ($element.data('color') || (!$element.hasClass('infobox-dark') ? $element.css('color') : 'rgba(255,255,255,0.95)'));
      } else {
        return ('rgba(255, 0, 0, 0.7)');
      }
    };

    init();
    var update = function () {
      var $chart = $element.find('.easy-pie-chart.percentage')[0];
      $($chart).data('easyPieChart').update($attrs.percent);
    };
    $scope.$watch(function () {
      return [$attrs.percent];
    }, update, true);
  }
);

指令用法:

    <info-box class="infobox-blue2" percent="{{modelPercent}}" text="describes pie chart" text-is-number="false" content="more describing pie chart"></info-box>

我对我的属性百分比有一个监视,它运行直接的 jquery 更新功能。barColorFunction 控制我显示的颜色。

情况略有不同,但我希望这会有所帮助。

于 2014-01-15T06:20:03.263 回答