基于Ionic3实现选项卡切换并重新加载echarts


Posted in Javascript onSeptember 24, 2020

要求

选项卡每切换一次,就加载对应的一个echarts 图,要有一开始的动画效果

效果如下:

基于Ionic3实现选项卡切换并重新加载echarts

注意点

1、echarts要想每次都能重新加载,需要移除"_echarts_instance_"属性,否则一切换选项卡,就再也加载不出来了

2、在ts 中获取html 页面元素,不能写在构造方法里,应该写在ionViewDidEnter()方法里

3、选项卡<ion-segment> 不要搭配[ngSwitch] 的方式,因为这种情况下,只能获取当前选项卡中的元素,未选中的选项卡里的元素获取不到,在第2步骤ionViewDidEnter() 方法里自然也是获取不到。应当搭配(ionChange)使用方式

4、不能直接将chart作为全局变量,这样的话第二次加载就没有动画效果了

献上代码

html文件

<ion-header>
 <ion-navbar>
  <ion-title>区域</ion-title>
 </ion-navbar>

</ion-header>

<ion-content padding>

  <ion-segment [(ngModel)]="choice" (ionChange)="segmentChanged($event)">
   <ion-segment-button value="choice1">
    省份增速排名
   </ion-segment-button>
   <ion-segment-button value="choice2">
    市州增速排名
   </ion-segment-button>
   <ion-segment-button value="choice3">
    全省走势
   </ion-segment-button>
   <ion-segment-button value="choice4">
    市州占比
   </ion-segment-button>
  </ion-segment>

  <div id="chartContainer" style="width: 100%; height: 300px;"></div>

</ion-content>

ts文件

import {Component} from '@angular/core';
import * as echarts from 'echarts';

@Component({
 selector: 'page-data-area',
 templateUrl: 'area.html'
})
export class DataAreaPage {
 choice: string = "choice1";
 ec: any = echarts;
 chartContainer: any;

 constructor() {
 }

 clickChart1() {
  const chart1 = this.ec.init(this.chartContainer);
  chart1.setOption({
   series: {
    type: 'pie',
    data: [{
     name: 'A',
     value: 10
    }, {
     name: 'B',
     value: 20
    }, {
     name: 'C',
     value: 30
    }, {
     name: 'D',
     value: 40
    }]
   }
  }, true);
  this.chartContainer.removeAttribute("_echarts_instance_");
 }

 clickChart2() {
  const chart2 = this.ec.init(this.chartContainer);
  chart2.setOption({
   series: {
    type: 'pie',
    data: [{
     name: 'A',
     value: 10
    }, {
     name: 'B',
     value: 20
    }, {
     name: 'C',
     value: 30
    }]
   }
  }, true);
  this.chartContainer.removeAttribute("_echarts_instance_");
 }

 clickChart3() {
  const chart3 = this.ec.init(this.chartContainer);
  chart3.setOption({
   series: {
    type: 'pie',
    data: [{
     name: 'A',
     value: 10
    }, {
     name: 'B',
     value: 20
    }, {
     name: 'C',
     value: 30
    }, {
     name: 'D',
     value: 40
    }, {
     name: 'E',
     value: 50
    }]
   }
  }, true);
  this.chartContainer.removeAttribute("_echarts_instance_");
 }

 clickChart4() {
  const chart4 = this.ec.init(this.chartContainer);
  chart4.setOption({
   series: {
    type: 'pie',
    data: [{
     name: 'A',
     value: 10
    }, {
     name: 'B',
     value: 20
    }, {
     name: 'C',
     value: 30
    }, {
     name: 'D',
     value: 40
    }, {
     name: 'E',
     value: 50
    }, {
     name: 'F',
     value: 60
    }]
   }
  }, true);
  this.chartContainer.removeAttribute("_echarts_instance_");
 }

 segmentChanged(e) {
  if (e.value == "choice1") {
   this.clickChart1();
  } else if (e.value == "choice2") {
   this.clickChart2();
  } else if (e.value == "choice3") {
   this.clickChart3();
  } else if (e.value == "choice4") {
   this.clickChart4();
  }
 }

 ionViewDidEnter() {
  this.chartContainer = document.getElementById('chartContainer');
  this.clickChart1();
 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery实现tr元素的上下移动示例代码
Dec 20 Javascript
js检测网络是否具体连接功能的代码
May 23 Javascript
点击button获取text内容并改变样式的js实现
Sep 09 Javascript
jquery获取多个checkbox的值异步提交给php
Jul 07 Javascript
浅谈javascript中的constructor
Jun 08 Javascript
在点击div中的p时,如何阻止事件冒泡
Feb 07 Javascript
ES6新特性之字符串的扩展实例分析
Apr 01 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
Mar 13 Javascript
使用 Vue 实现一个虚拟列表的方法
Aug 20 Javascript
Element Backtop回到顶部的具体使用
Jul 27 Javascript
关于vue-cli3打包代码后白屏的解决方案
Sep 02 Javascript
React + Threejs + Swiper 实现全景图效果的完整代码
Jun 28 Javascript
vue3.0生命周期的示例代码
Sep 24 #Javascript
js 将多个对象合并成一个对象 assign方法的实现
Sep 24 #Javascript
Vue3不支持Filters过滤器的问题
Sep 24 #Javascript
jdk1.8+vue elementui实现多级菜单功能
Sep 24 #Javascript
vue实现日历表格(element-ui)
Sep 24 #Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
Sep 24 #Javascript
.netcore+vue 实现压缩文件下载功能
Sep 24 #Javascript
You might like
Zend Framework页面缓存实例
2014/06/25 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
PHP字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
使用laravel和ECharts实现折线图效果的例子
2019/10/09 PHP
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
基于 D3.js 绘制动态进度条的实例详解
2018/02/26 Javascript
React 组件转 Vue 组件的命令写法
2018/02/28 Javascript
JS实现的base64加密解密操作示例
2018/04/18 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
Vue 动态添加路由及生成菜单的方法示例
2019/06/20 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
Python中使用PIPE操作Linux管道
2015/02/04 Python
python单例模式实例分析
2015/04/08 Python
Python中scatter函数参数及用法详解
2017/11/08 Python
使用tensorflow实现线性回归
2018/09/08 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
python使用插值法画出平滑曲线
2018/12/15 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
德国网上超市:myTime.de
2019/08/26 全球购物
红领巾广播站广播稿
2014/02/01 职场文书
工会主席事迹材料
2014/06/03 职场文书
土地租赁意向书
2014/07/30 职场文书
学校班子个人对照检查材料思想汇报
2014/09/27 职场文书
党支部先进事迹材料
2014/12/24 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
电影雷锋观后感
2015/06/10 职场文书