I have the following code where in functions addPregunta
, addResouesta
and addCotizacion
I try to print this.graphDefinition
and it prints undefined. I don't know what is the real reason for having this because when I try to print the same variable but without Angular/Ionic3 and using the same variables it works.
import { Component, ViewChild } from "@angular/core";
import {
IonicPage,
NavController,
NavParams,
AlertController
} from "ionic-angular";
import * as mermaid from "mermaid";
import * as $ from "jquery";
import * as shortid from "short-id";
@IonicPage()
@Component({
selector: "page-flow-chart",
templateUrl: "flow-chart.html"
})
export class FlowChartPage {
agregar = document.getElementsByClassName("agregar");
respuesta = document.getElementsByClassName("respuesta");
cotizacion = document.getElementsByClassName("cotizacion");
pregunta = document.getElementsByClassName("pregunta");
@ViewChild("mermaid")
public mermaidDiv;
propiedades: string;
clases: string;
uniones: string;
graphDefinition: string;
constructor(
public navCtrl: NavController,
public navParams: NavParams,
public alertCtrl: AlertController
) {
this.propiedades = `
P0:::inicial
P1:::pregunta
P2:::pregunta
P3:::pregunta
R1:::respuesta
R2:::respuesta
R3:::respuesta
R4:::respuesta
R5:::respuesta
R6:::respuesta
R7:::respuesta
R8:::respuesta
R9:::respuesta
C1:::cotizacion
C2:::cotizacion
C3:::cotizacion
A1:::agregar
A2:::agregar
A3:::agregar
`;
this.clases = `
classDef inicial fill: #F1F1F1, stroke: #3590C4, stroke-width: 4px, color: #3590C4, font-weight: bold, font-size: 10px
classDef pregunta fill: #F1F1F1, stroke: #F1F1F1, stroke-width: 4px, color: #3590C4, font-weight: bold, font-size: 10px
classDef respuesta fill: #F1F1F1, stroke: #F1F1F1, stroke-width: 0px, color: #243E56, font-weight: bold, font-size: 10px
classDef respuesta:hover fill: #288AC1, stroke: #288AC1, stroke-width: 0px, color: #FFFFFF, font-weight: bold, font-size: 10px, cursor: pointer
classDef cotizacion fill: #F2680A, stroke: #F2680A, stroke-width: 4px, color: #FFFFFF, font-weight: bold, font-size: 10px
classDef cotizacion:hover fill: #F2420A, stroke: #F2420A, stroke-width: 4px, color: #FFFFFF, font-weight: bold, font-size: 10px, cursor: pointer
classDef agregar fill: #F1F1F1, stroke: #243E56, stroke-width: 1px, color: #243E56, font-weight: bold, font-size: 10px, stroke-dasharray: 5
classDef agregar:hover fill: #D3D3D3, cursor: pointer
`;
this.uniones = `
P0(Pregunta) --> R1(Respuesta 1)
P0(Pregunta) --> R2(Respuesta 2)
P0(Pregunta) --> R3(Respuesta 3)
R1 --> P1(Pregunta 1)
R2 --> P2(Pregunta 2)
R3 --> P3(Pregunta 3)
P1 --> R4(Respuesta)
P1 --> R5(Respuesta)
P2 --> R6(Respuesta)
P2 --> R7(Respuesta)
P3 --> R8(Respuesta)
P3 --> R9(Respuesta)
R6 --> C1(Precio)
R7 --> C2(Precio)
R8 --> C3(Precio)
R4 --> A1(+ Agregar)
R5 --> A2(+ Agregar)
R9 --> A3(+ Agregar)
`;
this.graphDefinition = `
graph TD
${this.propiedades}
${this.uniones}
${this.clases}
`;
}
ionViewDidLoad() {
this.mermaidStart();
for (let i = 0; i < this.agregar.length; i++) {
this.agregar[i].addEventListener("click", this.addElement, false);
}
for (let i = 0; i < this.respuesta.length; i++) {
this.respuesta[i].addEventListener("click", this.addRespuesta, false);
}
for (let i = 0; i < this.cotizacion.length; i++) {
this.cotizacion[i].addEventListener("click", this.addCotizacion, false);
}
for (let i = 0; i < this.pregunta.length; i++) {
this.pregunta[i].addEventListener("click", this.addCotizacion, false);
}
}
mermaidStart() {
mermaid.initialize({
theme: "default",
securityLevel: "loose",
startOnLoad: true,
flowchart: {
useMaxWidth: true,
htmlLabels: true
}
});
const element: any = this.mermaidDiv.nativeElement;
mermaid.render("graphDiv", this.graphDefinition, svgCode => {
element.innerHTML = svgCode;
});
}
addPregunta() {
console.log(this.graphDefinition);
alert("Pregunta");
}
addRespuesta() {
console.log(this.graphDefinition);
alert("Respuesta");
}
addCotizacion() {
console.log(this.graphDefinition);
alert("Cotizacion");
}
addElement() {
this.uniones += "R9 --> A2";
alert("Funciona la ejecucion");
}
}
<ion-header>
<ion-navbar>
<ion-title>flowChart</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<div class="graph">
<div #mermaid></div>
</div>
</ion-content>