基于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 相关文章推荐
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
Feb 03 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
Jul 10 Javascript
jquery中的$(document).ready()使用小结
Feb 14 Javascript
AngularJS基础学习笔记之指令
May 10 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
Oct 24 Javascript
一不小心就做错的JS闭包面试题
Nov 25 Javascript
浏览器复制插件zeroclipboard使用指南
Mar 26 Javascript
jQuery 监控键盘一段时间没输入
Apr 22 Javascript
基于JS实现数字+字母+中文的混合排序方法
Jun 06 Javascript
浅述节点的创建及常见功能的实现
Dec 15 Javascript
javascript回调函数的概念理解与用法分析
May 27 Javascript
微信打开网址添加在浏览器中打开提示的办法
May 20 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
PHP setTime 设置当前时间的代码
2012/08/27 PHP
PHP捕获Fatal error错误的方法
2014/06/11 PHP
从刷票了解获得客户端IP的方法
2015/09/21 PHP
PHP如何通过AJAX方式实现登录功能
2015/11/23 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
JavaScript与Div对层定位和移动获得坐标的实现代码
2010/09/08 Javascript
一个基于jquery的文本框记数器
2012/09/19 Javascript
基于jQuery中对数组进行操作的方法
2013/04/16 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
vue-quill-editor富文本编辑器简单使用方法
2018/09/21 Javascript
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
解决vue-router 嵌套路由没反应的问题
2020/09/22 Javascript
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
python制作抖音代码舞
2019/04/07 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
用python对excel查重
2020/12/07 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
浅谈HTML5 Web Worker的使用
2018/01/05 HTML / CSS
财务信息服务专业自荐书范文
2014/02/08 职场文书
六一节目主持词
2014/04/01 职场文书
工伤赔偿协议书
2014/04/15 职场文书
募捐感谢信
2015/01/22 职场文书
2015年社区文体活动总结
2015/03/25 职场文书
乒乓球比赛通知
2015/04/27 职场文书
给校长的建议书范文
2015/09/14 职场文书
2016入党心得体会范文
2016/01/06 职场文书
小学英语教学反思范文
2016/02/15 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
Java SSH 秘钥连接mysql数据库的方法
2021/06/28 Java/Android