基于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 命名规则 变量命名规则
Feb 25 Javascript
纯js简单日历实现代码
Oct 05 Javascript
利用javascript打开模态对话框(示例代码)
Jan 11 Javascript
JavaScript立即执行函数的三种不同写法
Sep 05 Javascript
Javascript 多物体运动的实现
Dec 24 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
Mar 24 Javascript
JS实现可点击展开与关闭的左侧广告代码
Sep 02 Javascript
JavaScript多图片上传案例
Sep 28 Javascript
使用jQuery实现购物车结算功能
Aug 15 jQuery
es6中比较有用的7个技巧小结
Jul 12 Javascript
LayUI数据接口返回实体封装的例子
Sep 12 Javascript
Openlayers实现扩散的动态点(水纹效果)
Aug 17 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牛逼的面试题分享
2013/01/18 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
php微信公众号开发之欢迎老朋友
2018/10/20 PHP
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
微信小程序 教程之wxapp 视图容器 view
2016/10/19 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
完美实现js选项卡切换效果(一)
2017/03/08 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
微信小程序的分类页面制作
2017/06/27 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
JavaScript变速动画函数封装添加任意多个属性
2019/04/03 Javascript
JS使用cookie保存用户登录信息操作示例
2019/05/30 Javascript
jquery实现吸顶导航效果
2020/01/08 jQuery
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
Vue仿Bibibili首页的问题
2021/01/21 Vue.js
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python将ip地址转换成整数的方法
2015/03/17 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
流行文化收藏品:Sideshow(DC漫画,星球大战,漫威)
2019/03/17 全球购物
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
英超联赛的首选足球:Mitre足球
2019/05/06 全球购物
芭比波朗加拿大官方网站:Bobbi Brown Cosmetics CA
2020/11/05 全球购物
上海雨人软件技术开发有限公司测试题
2015/07/14 面试题
数据保密承诺书
2014/06/03 职场文书
党员倡议书
2015/01/19 职场文书
业务员辞职信范文
2015/03/02 职场文书