angular - 在 ionic 3 中使用仪表

标签 angular typescript highcharts ionic3 gauge

我正在 Ionic 3 中做一个项目,需要在其中使用仪表。

例子是ionic 2,很难理解和集成。 谁能解释一下如何解决这个问题? 如果有人有工作量表,请分享代码。 这对每个人都有帮助。

最佳答案

您可以使用highcharts gauge .

我有一个非常复杂的。它有表和饼。换句话说,自定义组件。但是您可以使用 Fiddler 轻松获得这个想法。

注意:我已将我的工作代码放在这里。请根据需要进行调整。

由于您使用的是 Ionic3/Angular,您可以使用这些 npm 包:

npm i highcharts - -save

npm i highcharts-more - -save

npm i highcharts-solid-gauge  - - save

html

 <div [id]="data?.chartId" class="my-chart"></div>

ts

import * as HighCharts from 'highcharts';
import HighchartsMore from 'highcharts-more';
HighchartsMore(HighCharts);

constructor(){}

showChart(totalOfBudgetAndContingency: number, paidPercentage: number, remainingPercentageExcludingPaid: number, contingencyPercentage: number,
    spent: number, spentOnChart: number, remainingAmount: number, daysToGo: number, spentOverColor: string, chartId: string) {
    let chart = HighCharts.chart(chartId, {
      "chart": {
        "height": 400,
        "renderTo": "container",
        "plotBackgroundColor": null,
        "plotBackgroundImage": null,
        "plotBorderWidth": 0,
        "plotShadow": false,
        "backgroundColor": "white"
      },
      "credits": {
        "enabled": false
      },
      "tooltip": {
        "enabled": true
      },
      "title": {
        "useHtml": true,
        "text": "<div style=\"font-size: 1.6rem;\">Remaining</div><br/><div style=\"font-size: 20px;color:" + spentOverColor + "\">" + remainingAmount.toLocaleString() + "</div>",
        "align": "center",
        "verticalAlign": "top",
        "y": 120,
      },
      "subtitle": {
        "useHtml": true,
        "text": "<div style=\"font-size: 1.6rem;\">Days To Go</div><br/><div style=\"font-size: 16px;\">" + daysToGo + "</div>",
        "align": "center",
        "verticalAlign": "top",
        "y": 170,
      },
      "pane": {
        "center": ["50%", "47%"],
        "size": "70%",
        "startAngle": -90,
        "endAngle": 90,
        "background": {
          "borderWidth": 0,
          "backgroundColor": "transparent",
          "innerRadius": "95%",
          "outerRadius": "100%",
          "shape": "arc"
        }
      },
      "yAxis": [{
        "lineWidth": 0,
        "min": 0,
        "max": totalOfBudgetAndContingency, /* Budget + Contingency */
        tickColor: 'white',
        tickWidth: 4,
        minorTickInterval: 'auto',
        minorTickLength: 3,
        minorTickPosition: 'inside',
        tickPixelInterval: 50,
        tickPosition: '',
        tickPositioner: (min, max) => {
          var ticks = [],
            tick = min,
            step = Math.round((max - min) / 10);
          while (tick < max - step / 2) {
            ticks.push(Math.round(tick));
            tick += step;
          }
          ticks.push(Math.round(max));
          return ticks;
        },
        tickLength: 30,

        "labels": {
          "enabled": true,
          distance: 30,
          style: {
            color: '#50a2a7',
            font: '11px Trebuchet MS, Verdana, sans-serif'
          }
        },
        "title": {
          "text": "",
          "useHTML": false,
          "y": 80
        },
        "pane": 0
      }],
      "plotOptions": {
        "series": {
          "enableMouseTracking": false
        },
        "pie": {
          "dataLabels": {
            "enabled": true,
            "distance": 0,
            "style": {
              "fontWeight": "bold",
              "color": "white",
              "textShadow": "0px 1px 2px black"
            }
          },
          "size": "75%",
          "startAngle": -90,
          "endAngle": 90,
          "center": ["50%", "47%"]
        },
        "gauge": {
          "dataLabels": {
            "enabled": false
          },
          "pivot": {
            "radius": 80,
            "borderWidth": 1,
            "borderColor": "transparent",
            "backgroundColor": "white"
          },
          "dial": {
            "radius": "100%",
            "backgroundColor": "#e9b44c",
            "borderColor": "",
            "baseWidth": 60,
            "topWidth": 1,
            "baseLength": "5%",
            "rearLength": "5%"
          }
        }
      },

      "series": [{
        "type": "pie",
        "name": "Budget",
        "innerSize": "80%",
        "data": [{
          "y": paidPercentage, /* Paid as percentage */
          "name": "",
          color: 'rgba(80,162,167, 0.3)'
        }, {
          "y": remainingPercentageExcludingPaid, /* Remaining as percentage excluding paid */
          "name": "",
          color: 'rgba(187,187,187, 0.2)'
        }, {
          "y": contingencyPercentage, /* Contingency as percentage */
          "name": "",
          color: 'rgba(155,41,21, 0.9)'
        }]
      }, {
        "type": "gauge",
        "name": "Spent",
        "data": [spentOnChart], /* Spent */
        "dial": {
          "rearLength": 0
        }
      }],
    });
  }

这里正在工作 Fiddler

enter image description here

关于angular - 在 ionic 3 中使用仪表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48683058/

相关文章:

jquery - Highcharts : Donut Pie with URL

angular - 无法绑定(bind)到 'ngTemplateOutlet',因为它不是 'ng-container' 的已知属性

angular - 如何在其他项目中重用 Angular 模块

html - 在 CSS 内容属性中使用 Angular 内插字符串

javascript - Spread rest with TypeScript 提示调用目标的签名

Typescript - 应用程序范围的状态(单例?)

javascript - 嵌套表使用带有 'Data defined in a HTML table' 的 Highcharts 为基本柱形图生成意外的列

javascript - 使用按钮更改 Highcharts 选项

angular - 如何在 Angular 和 Rxjs 中只调用一次 ajax?

javascript - Typescript 和 Javascript ES6、ES.NEXT 类构造函数参数对比