Я работаю над угловым проектом, где у меня есть кнопка, где я хочу, чтобы она скрывала все, кроме определенной серии, на старшей диаграмме.Возможно, это что-то простое, но я занимаюсь веб-разработкой лишь немного, и мне не хватает некоторых основ.Я на самом деле не веб-разработчик, но согласился взять на себя часть работы вместо того, чтобы нанимать компанию кого-то, кто знал, что они делают.В любом случае, правильный разработчик настроил проект для меня и показал мне, как делать то, что я хотел сделать, но он в настоящее время в отпуске, и я немного застрял.
Итак, я использую высокие графики для отображениянекоторые данные.У меня есть папка highcharts с повторно используемым компонентом, называемым highcharts-component.ts, который выглядит следующим образом:
import { Component, ElementRef, Input, OnDestroy, OnInit } from "@angular/core";
import { chart } from "highcharts";
import * as Highcharts from "highcharts";
import drilldown from "highcharts/modules/drilldown.src.js";
drilldown(Highcharts);
declare var require: any;
require("highcharts/highcharts-more")(Highcharts);
require("highcharts/modules/solid-gauge")(Highcharts);
require("highcharts/modules/heatmap")(Highcharts);
require("highcharts/modules/treemap")(Highcharts);
require("highcharts/modules/funnel")(Highcharts);
@Component({
selector: "app-chart",
styleUrls: ["./styles.scss"],
templateUrl: "./template.html"
})
export class ChartComponent implements OnDestroy, OnInit {
@Input()
set options(value: Highcharts.Options) {
this._options = value;
this.chart = chart(this.elementRef.nativeElement, this._options);
}
private chart: Highcharts.ChartObject;
private _options: Highcharts.Options;
constructor(private elementRef: ElementRef) {}
ngOnDestroy() {
this.chart = null;
}
ngOnInit() {
this.chart = chart(this.elementRef.nativeElement, this._options);
}
public showSingleSeries(seriesNumber) {
for (let x = 0; x < this.chart.series.length; x++) {
if (x == seriesNumber) {
this.chart.series[seriesNumber].show();
} else {
this.chart.series[seriesNumber].hide();
}
}
}
}
Затем в моем файле компонента с именем card-fancy-example.ts у меня есть что-то вроде этого:
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { NgModule, OnInit, ViewChild, ElementRef, VERSION } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { Component } from '@angular/core';
import * as Highcharts from "highcharts";
/**
* @title Card with multiple sections
*/
@Component({
selector: 'card-fancy-example',
templateUrl: 'card-fancy-example.html',
styleUrls: ['card-fancy-example.css'],
})
export class CardFancyExample {
myChart: Highcharts.Options = {
// Created pie chart using Highchart
chart: {
type: 'pie'
},
title: {
text: 'Contents using Pie chart'
},
subtitle: {
text: '3D donut in Highcharts'
},
plotOptions: {
pie: {
innerSize: 100,
depth: 45
}
}
};
constructor() {
}
ngOnInit() {
this.loadChart();
}
loadChart()
{
this.myChart = {
...this.myChart,
series: [{
name: 'Operating Systems',
data: [
{
name: 'Windows',
y: 88.19,
drilldown: 'windows-versions'
},
['MacOSX', 9.22],
['Linux', 1.58],
['Others', 1.01]
]
}],
drilldown: {
series: [{
name: 'Windows versions',
id: 'windows-versions',
data: [
['Win 7', 55.03],
['Win XP', 15.83],
['Win Vista', 3.59],
['Win 8', 7.56],
['Win 8.1', 6.18]
]
}]
}
}
}
showSingleSeries(seriesNumber)
{
// Where I want to call the showSingleSeries method in highcharts-component.ts
}
}
и мой html-файл выглядит следующим образом:
<button (click)="showSingleSeries(0)">Remove All Series But Windows</button>
<button (click)="showSingleSeries(1)">Remove All Series But Linux</button>
<app-chart [options]="myChart"></app-chart>
Диаграмма загружается правильно, но теперь, когда я нажимаю на определенную кнопку, я хочу иметь возможность отображать только «Windows»или серия "MacOSX".У меня есть метод для этого в highcharts-component.ts, который называется showSingleSeries, который выглядит следующим образом:
public showSingleSeries(seriesNumber) {
for (let x = 0; x < this.chart.series.length; x++) {
if (x == seriesNumber) {
this.chart.series[x].show();
} else {
this.chart.series[x].hide();
}
}
}
Дело в том, что я недостаточно знаю об angular, чтобы знать, как получить доступ к этому методу showSingleSeries?Как мне это сделать?Вот что у меня есть в stackblitz
Спасибо.
EDIT: я отредактировал пару ошибок в своем коде и изменил тип диаграммы.Я обновил stackblitz с решением.Спасибо @ Lys