cnpm install echarts --save
可是ionic項目依賴於angular和typeScript,因此再安裝ts支持包css
cnpm install @types/echarts -–save
官網給出的一段建議:
在 3.1.1 版本以前 ECharts 在 npm 上的 package 是非官方維護的,從 3.1.1 開始由官方 EFE 維護 npm 上 ECharts 和 zrender 的 package。
因此還得安裝zrenderhtml
cnpm install zrender
import echarts from 'echarts';
initCharts(){ echarts.init(this.myCharts.nativeElement).setOption({ xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] }, yAxis: { type: 'value' }, series: [{ data: [820, 932, 901, 934, 1290, 1330, 1320], type: 'line' }] },true); }
constructor(public navCtrl: NavController, public navParams: NavParams) { console.log(echarts); this.initCharts(); }
找到name.html定義一個呈現圖表的div以下npm
<ion-header> <ion-navbar> <ion-title>charts</ion-title> </ion-navbar> </ion-header> <ion-content padding> // #charts經過ViewChild獲取dom節點 <div class="charts" #charts> </div> </ion-content>
@ViewChild('charts') myCharts:ElementRef
大概意思是說獲取不到dom節點,也就是咱們展現地圖的那個div,打印了以後發現是null或者undefine。後面就打印了一下ionic頁面的生命週期,測試了一下ionic頁面的生命週期函數。echarts
生命週期函數 觸發時刻 順序
constructor() 建立頁面時觸發 1
ionViewDidLoad() 當頁面加載時觸發 2
ionViewWillEnter() 當將要進入頁面時觸發 3
ionViewDidEnter() 進入頁面時觸發 4dom
在constructor() 和 ionViewDidLoad()initCharts()函數中是獲取不到dom節點的,由於頁面尚未加載完成,在ionViewWillEnter()和ionViewDidEnter()是能獲取到dom節點的,顧名思義只有當頁面加載完成時才能獲取到dom節點,因此再在頁面加載完成後的生命週期函數裏能夠獲取到改成ionic
ionViewWillEnter(){ }
或函數
ionViewDidEnter(){ this.initCharts(); }
運行ionic serve 完美解決測試
Charts.ts以下this
import {Component, ElementRef, ViewChild} from '@angular/core'; import { IonicPage, NavController, NavParams } from 'ionic-angular'; import echarts from 'echarts'; /** * Generated class for the ChartsPage page. * * See https://ionicframework.com/docs/components/#navigation for more info on * Ionic pages and navigation. */ @IonicPage() @Component({ selector: 'page-charts', templateUrl: 'charts.html', }) export class ChartsPage { @ViewChild('charts') myCharts:ElementRef constructor(public navCtrl: NavController, public navParams: NavParams) { console.log(echarts); } ionViewDidLoad() { // this.initCharts(); console.log('ionViewDidLoad ChartsPage'); } // ionViewDidEnter(){ // this.initCharts(); // } ionViewWillEnter(){ this.initCharts(); } initCharts(){ console.log(document.getElementById('charts')); echarts.init(this.myCharts.nativeElement).setOption({ xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] }, yAxis: { type: 'value' }, series: [{ data: [820, 932, 901, 934, 1290, 1330, 1320], type: 'line' }] },true); } }
charts.htmlspa
<!-- Generated template for the ChartsPage page. See http://ionicframework.com/docs/components/#navigation for more info on Ionic pages and navigation. --> <ion-header> <ion-navbar> <ion-title>charts</ion-title> </ion-navbar> </ion-header> <ion-content padding> <div class="charts" #charts> </div> </ion-content>
charts.scss
page-charts { .charts{ height: 500px; } }