基于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的输入框在光标位置插入内容, 并选中
Oct 29 Javascript
jQuery中[attribute^=value]选择器用法实例
Dec 31 Javascript
JavaScript中模拟实现jsonp
Jun 19 Javascript
深入探秘jquery瀑布流的实现
Jan 30 Javascript
详解Angular中$cacheFactory缓存的使用
Aug 19 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
Dec 26 Javascript
vue嵌套路由与404重定向实现方法分析
May 04 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
Sep 18 Javascript
vue集成kindeditor富文本的实现示例代码
Jun 07 Javascript
JavaScript实现简单随机点名器
Nov 21 Javascript
bootstrap-table后端分页功能完整实例
Jun 01 Javascript
全网小程序接口请求封装实例代码
Nov 06 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
Zerg建筑一览
2020/03/14 星际争霸
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
2012/09/19 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
PHP技术开发微信公众平台
2015/07/22 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
javascript 有趣而诡异的数组
2009/04/06 Javascript
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
js无刷新操作table的行和列
2014/03/27 Javascript
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
2016/01/19 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
Vue实现手机计算器
2020/08/17 Javascript
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
在Python中使用异步Socket编程性能测试
2014/06/25 Python
python批量创建指定名称的文件夹
2019/03/21 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
python科学计算之scipy——optimize用法
2019/11/25 Python
在django中自定义字段Field详解
2019/12/03 Python
Python之Class&amp;Object用法详解
2019/12/25 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
2020/02/11 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
python 多线程共享全局变量的优劣
2020/09/24 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
幼儿园小班评语
2014/04/18 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
2014年最新领导班子整改方案
2014/09/27 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
环境卫生工作汇报材料
2014/10/28 职场文书
如何书写先进事迹材料?
2019/07/02 职场文书
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js
python实现商品进销存管理系统
2022/05/30 Python