林中林 發表於 2021-3-29 14:15:00

uni-app 下使用ECharts

<p><strong>关键词:uni-app;ECharts;</strong></p>
<p>认知尚浅,如有高见,愿闻其详。</p>
<p> </p>
<p><strong>  前言:</strong>本次的教程与上次的基于WePY 2.x平台下使用ECharts方式基本一致,毕竟目标平台都是微信小程序而已(别的平台未测试),只是就是多了一个参数而已。</p>
<p>  本次使用的是仍然是echarts-for-weixin组件,其对小程序进行了兼容适配,我们进行直接下载项目的组件文件,然后引入就能使用了。其次,还有一种方式,就是去uni-app插件市场进行echarts搜索,是有人已经做了适配的,同样是在此项目的基础上改的,只不过他的方式是通过ec参数传入options,进行数据赋值。废话不多说,开干。</p>
<p> </p>
<h2 id="步骤">步骤</h2>
<ol>
<li>先下载开源项目echarts-for-weixin,把开源项目中ec-canvas文件夹中的文件拷到自己的项目中<strong>(千万别下Release,好像还是老版本....)</strong></li>
</ol>
<p><img src="https://img2020.cnblogs.com/blog/1667295/202102/1667295-20210202121022694-60271341.png" alt="" loading="lazy"></p>
<ol start="2">
<li>
<p>对引入组件中的<code>ec-canvas.js</code>文件进行一点点的修改(<strong>重要</strong>)</p>
<blockquote>
<p>本步骤主要是为了解决引入后使用中点击无效果与echart初始化问题,具体问题于文章底部详述。</p>
</blockquote>
</li>
</ol>
<p><img src="https://img2020.cnblogs.com/blog/1667295/202103/1667295-20210318180740068-1014450640.png" alt="" loading="lazy"></p>
<ol start="3">
<li>
<p>在需要在<code>pages.json</code>下的<code>globalStyle</code>引入<code>ec-canvas</code>组件</p>
<blockquote>
<p>①-全局引入<code>ec-canvas</code>组件,用于承载统计图表</p>
</blockquote>
<pre><code class="language-json"> "globalStyle": {
...
"usingComponents": {//引入全局ec-canvas组件
        "ec-canvas": "/static/plugin/echart/ec-canvas"//根据自己放的路径改变
}
},
</code></pre>
</li>
<li>
<p>进行<code>Page</code>或<code>Component</code>下的<code> template</code>节点构建以及<code>style</code>样式引入,</p>
<blockquote>
<p>①-构建节点</p>
</blockquote>
<pre><code class="language-vue">&lt;template&gt;
&lt;view class="container"&gt;
    &lt;view class="main"&gt;
      &lt;ec-canvas
      id="month-trend-bar-dom"
      class="month-trend"
      canvas-id="month-trend-bar"
      @init="echartBarInit"
      :ec="ec"
      &gt;
      &lt;/ec-canvas&gt;
    &lt;/view&gt;
&lt;/view&gt;
&lt;/template&gt;
</code></pre>
<blockquote>
<p>②-引入样式      <strong>注意修改<code>lang</code>,本教程中使用的是<code>scss</code></strong></p>
</blockquote>
<pre><code class="language-css">&lt;style lang="scss"&gt;
.container{
margin-top: 30px;
min-height: 100%;
.main{
    width: 750rpx;
    .month-trend{
      display: block;
      width: 750rpx;
      height: 500rpx;
    }
}
}
&lt;/style&gt;
</code></pre>
</li>
<li>
<p>声明<code>data</code>中的<code>ec</code>以及定义<code>echartBarInit</code>初始化方法</p>
<blockquote>
<p>①-声明 <code>ec</code></p>
</blockquote>
<pre><code class="language-js">data: {
    // 有需要的可进行一些配置
    ec: {
    }
},
</code></pre>
<blockquote>
<p>②-定义<code>echarts</code>初始胡方法<code>echartBarInit</code></p>
</blockquote>
<pre><code class="language-js">methods: {
    echartBarInit({ detail }) {
      // 初始化方法
      this.initChart(
      detail.echart,//ec-canvas传回的echart参数
      detail.canvas,
      detail.width,
      detail.height,
      detail.dpr,
      detail.wxNode//ec-canvas传回的this
      );
    },
    initChart(echart, canvas, width, height, dpr, wxNode) {
      let chart = echart.init(canvas, null, {//进行chart初始化
      width: width,
      height: height,
      devicePixelRatio: dpr,
      });
      canvas.setChart(chart);
      var option = {
      color: [
          "#37A2DA",
          "#32C5E9",
          "#67E0E3",
          "#91F2DE",
          "#FFDB5C",
          "#FF9F7F",
      ],
      legend: {
          data: ["直接访问", "邮件营销", "联盟广告"],
      },
      xAxis: [
          {
            type: "category",
            data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
            axisTick: {
            alignWithLabel: true,
            },
          },
      ],
      yAxis: [
          {
            type: "value",
          },
      ],
      series: [
          {
            name: "直接访问",
            type: "bar",
            barWidth: "60%",
            data: ,
          },
          {
            name: "邮件营销",
            type: "bar",
            stack: "总量",
            label: {
            normal: {
                show: true,
                position: "insideRight",
            },
            },
            data: ,
          },
          {
            name: "联盟广告",
            type: "bar",
            stack: "总量",
            label: {
            normal: {
                show: true,
                position: "insideRight",
            },
            },
            data: ,
          },
      ],
      };
      chart.setOption(option);//赋值option
      wxNode.chart = chart;//赋值ec-canvas中的chart参数,达到监听效果实现
    },
}
</code></pre>
</li>
</ol>
<p><strong>至此,整个教程已经结束了,不出问题,你就可以看到效果了。</strong><br>
<strong>完整代码请移步至我的开源项目:</strong>Memoyu/mbill_wechat_app: 基于uni-app搭建个人记账小程序</p>
<p> </p>
<h2 id="点击无效果问题">点击无效果问题</h2>
<p>请参考此文底部:WePY 2.x 下使用ECharts - Memoyu - 博客园 (cnblogs.com)</p>
<p> </p>
<h2 id="效果">效果</h2>
<p><img src="https://img2020.cnblogs.com/blog/1667295/202103/1667295-20210318180539315-1020042920.gif" alt="" loading="lazy"></p><br><br>
来源:https://www.cnblogs.com/memoyu/p/14555331.html
頁: [1]
查看完整版本: uni-app 下使用ECharts