Ir al contenido principal

Angular Chart - Gráficos


Intro



La base de este tutorial he encontrado bajo este enlace al busca de información sobro como añadir los gráficos a una aplicación de Angular.

https://www.smashingmagazine.com/2020/07/responsive-dashboard-angular-material-ng2-charts-schematics/

También hay informaciones del creador de este componente que se puede encontrar aquí:

https://www.npmjs.com/package/ng2-charts

Es bastante útil, no obstante, he encontrado unos errores que tenia que modificar y adaptar a la app que estoy creando, tanto por el uso de Flex-Layout y adaptar a (responsive app) en cada aspecto y para cada dispositivo.

Si hayas practicado con Angular Admin Panel bajo este enlace: https://angularprojekt.blogspot.com/2021/07/angular-admin-panel-con-flex-layout.html

Hoy vamos a añadir unos gráficos, porque gráficos siempre molan y cada panel de administración debería tener unos cuántos.

Modificaciones

Pero antes de empezar vamos a modificar el proyecto.

En primer lugar, vamos a eliminar el contenido de mat-content y lo cambiaos por <router-outlet>

<mat-sidenav-content [@eSideContent]="isSmall ? 'close' : isState">

      <div class="container">

          <router-outlet></router-outlet>

      </div>

</mat-sidenav-content>

 

Ahora vamos a crear un componente menú donde colocamos todos los enlaces

escribimos en el terminal ng g c menus/bimenu

al ejecutar este comando se ha creado una carpeta menus y dentro otra con el nombre bimenu.

Abrimos el archivo bimenu.componente.ts y añadimos unos valores para dejar todavía unos link géneros, dejamos el array que hemos creado anteriormente y añadimos una variable showhide, que también la hemos tenido en app.component.ts, pero en este caso añadimos la directiva @Input() para recibir información desde componente padre. Y para que la animación también influye no lo olvidamos a añadir, en la siguiente manera.

import { Component, Input, OnInit } from '@angular/core';

import { eShowHide } from 'src/app/animation/eShowHide';

 

@Component({

  selector: 'app-bimenu',

  templateUrl: './bimenu.component.html',

  styleUrls: ['./bimenu.component.css'],

  animations: [

    eShowHide

  ]

})

export class BimenuComponent implements OnInit {

  menulist = new Array();

  @Input() showhide: boolean | undefined;

  constructor() { }

 

  ngOnInit(): void {

    this.menulist = Array.from({ length: 5 }, (_, i) => `Nav Item ${i + 1}`);

  }

}

 

y en el archivo bimenu.component.html añadimos lista de navegación

<mat-nav-list>

    <mat-list-item routerLink='/products' routerLinkActive="active-item">

        <mat-icon class="iconbtn">list</mat-icon>

        <span matLine [@eShowHide]="showhide ? 'show' : 'hide'">Products</span>

    </mat-list-item>

    <mat-list-item *ngFor="let m of menulist">

        <mat-icon class="iconbtn">face</mat-icon>

        <span matLine [@eShowHide]="showhide ? 'show' : 'hide'">

            {{m}}

        </span>

    </mat-list-item>

</mat-nav-list>

 

Dashboard & Products

A parte de dejar menú genérico añadimos un item para el componente que vamos a crear enseguida, para tener un enlace verdadero.

En primer lugar, creamos componente dashboard donde colocamos los gráficos con comando ng g c dash y el siguiente escribimos el comando ng g c products en el terminal para crear un enlace más.

El siguiente paso vamos a modulo app-routing.module.ts para añadir los enlaces para estos componentes.

Al encontrar un constate routes  escribimos lo siguiente.

const routes: Routes = [

  { path: '', component: DashComponent },

  { path: 'products', component: ProductsComponent }

];

 

Al añadir <route-outlet> al componete app.comp…. cada enlace (path) que no tiene nombre se aparece como primero por defecto. En caso de navegar a este enlace en routerLink escribimos lo siguiente.

En componente app.component.html encotramos un botón con icono settings y añadimos enlace a nuestro dashboard, en la siguiente manera.

 <button *ngIf="showhide" mat-icon-button routerLink="/">

        <mat-icon>settings</mat-icon>

 </button>

 

Enlace para componente con los productos hemos añadido anteriormente, al crear componente menú.

Y para terminar configurar nuevo entorno en el mismo componente en el lugar donde era menú de navegación lo cambiamos por lo siguiente.

<div class="appmenu" [@eSideNav]="isOpen ? isState : 'open'" [style.bottom.px]="isSmall ? '3' : '61'" [style.top.px]="isSmall ? topGap : '65'">

        <app-bimenu [showhide]="showhide" ></app-bimenu>

</div>

El parámetro showhide  pasara información sobre estado do los elementos en el bimenu.





Si todo ha salido bien el resultado debería ser el siguiente hacer clic entre icono de settings y enlace Products el contenido debería cambiar.

Preparación

Instalando componentes

En primer lugar, instalamos los siguientes componentes en el orden y nombres tal como son, (en el tutorial arriba mencionado no había esta información y por esto se producía error. Y para que funciona correctamente con Angular 12 es necesario instalar en esta manera.

npm install chart.js@2.9.3 --save

npm install ng2-charts@2.2.3 –save

el siguiente comando nos ayuda a crear los gráficos con unos datos de ejemplo.

npm install --save-dev ng2-charts-schematics

Componentes de visualización

Primero creamos una tarjeta (card) – ng g c card para reutilizar en diferentes sitios.

En card.components.ts  añadimos @Input() title: string.

import { Component, Input, OnInit } from '@angular/core';

 

@Component({

  selector: 'app-card',

  templateUrl: './card.component.html',

  styleUrls: ['./card.component.css']

})

export class CardComponent implements OnInit {

  @Input() title: string | undefined;

  constructor() { }

 

  ngOnInit(): void {

  }

}

y en card.component.html añadimos lo siguiente.

<mat-card>

    <mat-card-header>

        <mat-card-title>{{title}}</mat-card-title>

    </mat-card-header>

    <mat-card-content>

        <ng-content></ng-content>

    </mat-card-content>

</mat-card>

 

Los gráficos siempre molan

Para crear un componente de grafico utilizaremos el comando de chart schematic.

ng generate ng2-charts-schematics:bar charts/product-chart

y el siguiente

ng generate ng2-charts-schematics:line charts/sales-chart

Los tipos de graficos que existen en este componente son los siguientes:

·         bar

·         bubble

·         doughnut

·         horiontalBar

·         line

·         pie

·         polarArea

·         radar

·         scatter

Al cambiar el nombre en el comando automáticamente se crea un gráfico deseado.

ng generate ng2-charts-schematics: {{nombre de grafico}} charts/ {{nombre de componente}}

Antes de pasar a los componentes de gráficos abrimos archivo style.css y añadimos una clase.

.chartCanvas{

    width98%;

    displayflex;

    flex-directioncolumn;

    align-itemscenter;

    justify-contentcenter;

}

 

es importante poner el ancho de canvas a 98%, pero no a 100%, con las pruebas realizadas esta dimensión es más optima a la hora de que el grafico se adapte bien tanto a la tarjeta (card) como en el tamaño de las pantallas.

Abrimos uno de los componentes con gráfico y cambiamos estilo de (div) por nuestra clase.

<div class="chartCanvas">

  <canvas baseChart [datasets]="barChartData"

    [labels]="barChartLabels"

    [options]="barChartOptions"

    [plugins]="barChartPlugins" 

    [legend]="barChartLegend" 

    [chartType]="barChartType">

  </canvas>

</div>

 

bajo el {nombre de gráfico} componente.ts podemos encontrar  las configuraciones y parámetros por defecto para el grafico,  no voy enseñar todos, solamente me concentro en ChartDataSets.

 public barChartData: ChartDataSets[] = [

    {

      data: [65598081565540],

      label: 'Series A',

      // backgroundColor: 'rgb(27, 30, 77)',

      // hoverBackgroundColor: 'rgb(27, 30, 70)'

    },

    {

      data: [28484019862790],

      label: 'Series B',

      // backgroundColor: 'rgb(51, 105, 255)',

      // hoverBackgroundColor: 'rgb(51, 105, 250)'

    },

  ];

 

Aparte de añadir datos para mostrar, también se puede configurar, diferentes parámetros del mismo, al empezar escribir se aparecen opciones que podemos utilizar para modificar el grafico a nuestro gusto.



Ahora pasamos al componente dash creado anteriormente y introducimos el siguiente código.

<h1>Dashboard</h1>

<div fxLayout="column" fxLayoutGap="16px">

  <div fxLayout="row" fxLayout.sm="column" fxLayout.md="row" fxLayout.xs="column" fxLayoutGap="16px">

    <app-card title="Products" fxFlex>

      <app-product-chart></app-product-chart>

    </app-card>

    <app-card title="Sales" fxFlex>

      <app-sales-chart></app-sales-chart>

    </app-card>

  </div>

</div>

Tal como se puede ver hemos utilizado el componente <app-card> dentro de cual esta el componente con gráfico. Hemos pasado al componente hijo el nombre del grafico con la directiva title. Y finalmente hemos configurado con Flex-Layout opciones para visualizar el grafico en diferentes pantallas.

Y todo a salido bien este es el resultado


 




Comentarios

Entradas populares de este blog

Firebase Cloud Messaging en Angular 13

  Hoy vamos a añadir Push messag e en nuestra página con Firebase 9.0.0 y Angular 13 .Si has seguido los tutoriales anteriores por ahora lo dejamos y vamos a crear un proyecto nuevo desde cero. En primer lugar, nos aseguramos tener todos los framework y SDK al día. Utilizando Command Prompt escribimos ng version el resultado debería ser como en la imagen arriba. Si no, hay que instalar Node.js y Angular/Cli. Creamos proyecto nuevo ng new <nombre de proyecto> y abrimos Visual Code con el proyecto recién creado. Para poder trabajar con Firebase primero vamos a crear un proyecto en consola de firebase. Como crear lo puedes leer aquí https://firebase.google.com/docs/projects/learn-more Para comprobar la versión de firebase escribimos en terminal o en Command Prompt comando firebase –version . Si no hay ninguna instalamos con este comando: npm install -g firebase-tools y después en el terminal del proyecto npm install firebase para utilizar las bibliotecas. Preparación. Al crear

Angular Chart – conectamos con los datos

Conectar gráficos con los datos En este articulo conectamos los gráficos con los datos, en forma local y online. Intro Podríamos crear un archivo .json como abajo. "test" : [         {              "dane" : [                 {                      "mdane" : [ 65 ,  59 ,  80 ],                      "label" :  "Product A"                 },                 {                      "mdane" : [ 28 ,  48 ,  40                     ],                      "label" :  "Product B"                 },                 {                      "mdane" : [ 12 ,  28 ,  32 ],                      "label" :  "Product C"                 }             ],              "years" : [ "2018" ,  "2019" ,  "2020"             ]         }     ],   Y conectar el grafico con este simple código a través de HttpClient ge