zoukankan      html  css  js  c++  java
  • Ionic3实现选项卡切换可以重新加载echarts

    要求

    选项卡每切换一次,就加载对应的一个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=" 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();
      }
    
    }

    原创文章,欢迎转载,转载请注明出处!

  • 相关阅读:
    webpack初识
    Vue+ElementUi项目实现表格-单行拖拽
    promise/async与await 的执行顺序梳理
    MDN社区
    angularjs中的异步操作
    javascript中的字符串和数组的互转
    angularjs的练习题
    angularjs基础知识
    开发的两种方式
    ASP.NET中的HttpClient发送请求
  • 原文地址:https://www.cnblogs.com/acm-bingzi/p/ionicChartsTab.html
Copyright © 2011-2022 走看看