基于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 相关文章推荐
javascript的键盘控制事件说明
Apr 15 Javascript
Javascript 获取LI里的内容
Dec 17 Javascript
Extjs ajax同步请求时post方式参数发送方式
Aug 05 Javascript
javascript 折半查找字符在数组中的位置(有序列表)
Dec 09 Javascript
jQuery Clone Bug解决代码
Dec 22 Javascript
仿新浪微博返回顶部的jquery实现代码
Oct 01 Javascript
Js实现中国公民身份证号码有效性验证实例代码
May 03 Javascript
MvcPager分页控件 适用于Bootstrap
Jun 03 Javascript
详谈表单格式化插件jquery.serializeJSON
Jun 23 jQuery
angularJS开发注意事项
May 26 Javascript
es6基础学习之解构赋值
Dec 10 Javascript
Vue使用mixin分发组件的可复用功能
Sep 01 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中防止SQL注入最好的方法是什么
2013/06/10 PHP
PHP中的use关键字概述
2014/07/23 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
php+Ajax处理xml与json格式数据的方法示例
2019/03/04 PHP
node.js入门教程迷你书、node.js入门web应用开发完全示例
2014/04/06 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
node.js中的socket.io的广播消息
2014/12/15 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
2016/01/01 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
jQuery弹出层插件popShow用法示例
2017/01/23 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
JavaScript实现简易聊天对话框(加滚动条)
2020/02/10 Javascript
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
Jquery 获取相同NAME 或者id删除行操作
2020/08/24 jQuery
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
2017/08/23 Python
Django model序列化为json的方法示例
2018/10/16 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
小学生自我评价范文
2014/01/25 职场文书
文秘应聘自荐书范文
2014/02/18 职场文书
《望庐山瀑布》教学反思
2014/04/22 职场文书
社区服务标语
2014/07/01 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
恋恋笔记本观后感
2015/06/16 职场文书
七一表彰大会简报
2015/07/20 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python
go xorm框架的使用
2021/05/22 Golang
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS