基于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 相关文章推荐
用js闭包的方法实现多点标注冒泡示例
May 29 Javascript
jQuery计算文本框字数及限制文本框字数的方法
Mar 01 Javascript
20分钟轻松创建自己的Bootstrap站点
May 12 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
Mar 06 Javascript
Angular.JS中的指令引用template与指令当做属性详解
Mar 30 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
Apr 21 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
Nov 28 Javascript
浅谈React高阶组件
Mar 28 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
May 22 Javascript
bootstrap table表格插件之服务器端分页实例代码
Sep 12 Javascript
vue组件创建的三种方式小结
Feb 03 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
Jul 22 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
古巴咖啡 Cubita琥爵咖啡 独特的加勒比海风味咖啡
2021/03/06 新手入门
PHP系统流量分析的程序
2006/10/09 PHP
PHP HTML代码串 截取实现代码
2009/06/29 PHP
实现获取http内容的php函数分享
2014/02/16 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
2013/06/26 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
基于JavaScript实现复选框的全选和取消全选
2017/02/09 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
jQuery实现的页面弹幕效果【测试可用】
2018/08/17 jQuery
JavaScript简单编程实例学习
2020/02/14 Javascript
详解React 元素渲染
2020/07/07 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
python内置模块collections知识点总结
2019/12/19 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
Python 爬取必应壁纸的实例讲解
2020/02/24 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
如何基于Python按行合并两个txt
2020/11/03 Python
在C#中如何实现多态
2014/07/02 面试题
博士生导师推荐信
2014/07/08 职场文书
优秀团队申报材料
2014/12/26 职场文书
厉行节约工作总结
2015/08/12 职场文书
大学生如何逃脱“毕业季创业队即散伙”魔咒?
2019/08/19 职场文书
Python opencv缺陷检测的实现及问题解决
2021/04/24 Python
图文详解matlab原始处理图像几何变换
2021/07/09 Python