基于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 $.ajax各个事件执行顺序
Oct 15 Javascript
js replace正则表达式应用案例讲解
Jan 17 Javascript
Javascript学习指南
Dec 01 Javascript
jQuery实现表格颜色交替显示的方法
Mar 09 Javascript
JS折半插入排序算法实例
Dec 02 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
Jun 23 Javascript
Express使用html模板的详细代码
Sep 18 Javascript
vue中监听返回键问题
Aug 28 Javascript
24行JavaScript代码实现Redux的方法实例
Nov 17 Javascript
Js代码中的span拼接问题解决
Nov 22 Javascript
jquery实现直播弹幕效果
Nov 28 jQuery
vue cli4中mockjs在dev环境和build环境的配置详情
Apr 06 Vue.js
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
PHP查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
鸡肋的PHP单例模式应用详解
2013/06/03 PHP
php操作xml入门之xml基本介绍及xml标签元素
2015/01/23 PHP
php获取系统变量方法小结
2015/05/29 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
jquery 获取json数据实现代码
2009/04/27 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
JavaScript中创建类/对象的几种方法总结
2013/11/29 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
2014/05/01 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
vue加载完成后的回调函数方法
2018/09/07 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
浅谈JavaScript闭包
2019/04/09 Javascript
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
pycharm运行出现ImportError:No module named的解决方法
2018/10/13 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
关于python多重赋值的小问题
2019/04/17 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
linux面试题参考答案(9)
2015/01/07 面试题
考博专家推荐信模板
2013/12/02 职场文书
心得体会开头
2014/01/01 职场文书
办公室主任先进事迹
2014/01/18 职场文书
优秀通讯员事迹材料
2014/01/28 职场文书
分家协议书
2014/04/21 职场文书
幼儿园课题方案
2014/06/09 职场文书
护理心得体会范文
2016/01/22 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书