基于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 相关文章推荐
改进:论坛UBB代码自动插入方式
Dec 22 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
Nov 15 Javascript
javascript实现原生ajax的几种方法介绍
Sep 21 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
Sep 19 Javascript
JQuery.get提交页面不跳转的解决方法
Jan 13 Javascript
JavaScript实现添加及删除事件的方法小结
Aug 04 Javascript
JavaScript中的await/async的作用和用法
Oct 31 Javascript
使用Curl命令查看请求响应时间方法
Nov 04 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
Feb 22 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
Jan 12 Javascript
vue页面跳转实现页面缓存操作
Jul 22 Javascript
Element Notification通知的实现示例
Jul 27 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
ThinkPHP模板中数组循环实例
2014/10/30 PHP
PHP安全下载文件的方法
2016/04/07 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
js中cookie的使用详细分析
2008/05/28 Javascript
JavaScript delete 属性的使用
2009/10/08 Javascript
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
js 中的switch表达式使用示例
2020/06/03 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
封装好的一个万能检测表单的方法
2015/01/21 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
学习AngularJs:Directive指令用法(完整版)
2016/04/26 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
基于JavaScript实现数码时钟效果
2020/03/30 Javascript
js实现图片轮播效果学习笔记
2017/07/26 Javascript
利用JS做网页特效_大图轮播(实例讲解)
2017/08/09 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
2018/08/27 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
在vue中使用回调函数,this调用无效的解决
2020/08/11 Javascript
使用requests库制作Python爬虫
2018/03/25 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
2020/01/13 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
2020/02/14 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
葡萄牙语专业个人求职信
2013/12/10 职场文书
小学英语教学反思
2014/01/30 职场文书
我爱我校演讲稿
2014/05/21 职场文书
避暑山庄导游词
2015/02/04 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
2019年大学生学年自我鉴定!
2019/03/25 职场文书
OpenCV-Python实现轮廓拟合
2021/06/08 Python