uni-app引用Echarts的踩坑記錄

在uni-app項(xiàng)目引用Echarts

effect.gif

demo附件:https://github.com/chellel/echarts-uniapp

按照 uni-app中使用Echarts的實(shí)踐總結(jié) 的步驟引用echarts
先在uni-app新建項(xiàng)目访雪,然后在命令行管理中進(jìn)入到該目錄下,執(zhí)行

npm init

然后安裝依賴蔗衡。

npm install echarts mpvue-echarts --save

將下載后的三個(gè)庫(kù)從node_modules剪切到項(xiàng)目的根目錄下收恢。
開(kāi)始在項(xiàng)目中使用echarts。
page/index/index.vue

<template>
    <div class="container">
        <mpvue-echarts ref="pieChart" :echarts="echarts" :onInit="onInit" />
    </div>
</template>

<script>
    import * as echarts from 'echarts'
    import mpvueEcharts from 'mpvue-echarts'

    function initChart(canvas, width, height) {
        debugger
        const chart = echarts.init(canvas, null, {
            width: width,
            height: height
        })
        canvas.setChart(chart)

        var option = {
        title: {
            text: '某站點(diǎn)用戶訪問(wèn)來(lái)源',
            subtext: '純屬虛構(gòu)',
            x: 'center'
        },
        tooltip: {
            trigger: 'item',
            formatter: "{a} 疏唾 : {c} (l70fjtw%)"
        },
        legend: {
            orient: 'vertical',
            bottom: '10%',
            data: ['直接訪問(wèn)', '郵件營(yíng)銷', '聯(lián)盟廣告', '視頻廣告', '搜索引擎']
        },
        series: [{
            name: '訪問(wèn)來(lái)源',
            type: 'pie',
            radius: '55%',
            center: ['50%', '40%'],
            data: [{
                    value: 335,
                    name: '直接訪問(wèn)'
                },
                {
                    value: 310,
                    name: '郵件營(yíng)銷'
                },
                {
                    value: 234,
                    name: '聯(lián)盟廣告'
                },
                {
                    value: 135,
                    name: '視頻廣告'
                },
                {
                    value: 1548,
                    name: '搜索引擎'
                }
            ],
            itemStyle: {
                emphasis: {
                    shadowBlur: 10,
                    shadowOffsetX: 0,
                    shadowColor: 'rgba(0, 0, 0, 0.5)'
                }
            }
        }]
    };
    
    
        chart.setOption(option)
        return chart
    }

    export default {
        data() {
            return {
                echarts,
                onInit: initChart
            }
        },

        components: {
            mpvueEcharts
        }
    }
</script>

<style>
    .container {
        flex: 1;
    }
</style>

第一個(gè)坑

出現(xiàn)報(bào)錯(cuò): this.echarts.setCanvasCreator is not a function


image.png

嘗試將manifest.json - 源碼視圖中的小程序配置usingComponents刪除

 "mp-weixin": { /* 小程序特有相關(guān) */
       "usingComponents":true
    }

修改為

 "mp-weixin": { /* 小程序特有相關(guān) */
  }

停止微信開(kāi)發(fā)者工具后重新運(yùn)行区转,雖然顯示圖表,但是這不應(yīng)該是正確的處理方式瞻润。
于是尋找另外一種解決辦法喘垂。根據(jù)處理方法 #插件討論# 【 ECharts頁(yè)面模板 - DCloud 】APP中 報(bào)錯(cuò) this.echarts.setCanvasCreator is not a function
替換最新的 mpvue-echarts 組件echarts.vue绍撞, 源碼地址:https://github.com/dcloudio/hello-uniapp/blob/master/components/mpvue-echarts/src/echarts.vue
替換后查看echarts.vue正勒,可以看到init()通過(guò)$emit將onInit事件和數(shù)據(jù)發(fā)出

init() {
...
this.$emit('onInit', {
    width: res.width,
    height: res.height
});
...
},

因此在index.vue將

<mpvue-echarts ref="pieChart" :echarts="echarts" :onInit="onInit" />

修改為

<mpvue-echarts ref="pieChart" :echarts="echarts" @onInit="initChart" />

page/index/index.vue添加

methods:{
    initChart:initChart
}

修改initChart function

function initChart(e) {
        let {
            width,
            height
        } = e;
        
        let canvas = this.$refs.pieChart.canvas;
        echarts.setCanvasCreator(() => canvas);
        const chart = echarts.init(canvas, null, {
            width: width,
            height: height
        })
        canvas.setChart(chart)

        var option = {
            ...
        };
        chart.setOption(option)
        this.$refs.pieChart.setChart(chart)
        //return chart
    }
第二個(gè)坑

console不報(bào)錯(cuò),但是頁(yè)面也不顯示圖表傻铣。
原因是外框的height為0章贞,需要設(shè)置外框的高度。同時(shí)要注意page的css
page{display:flex;}會(huì)同樣無(wú)法顯示圖表矾柜。

<style>
    page,.container {
        height: 100%;
    }
</style>

完整代碼:

在最新的echart.vue小作修改

init() {
...
this.$emit('onInit', {
    canvas: this.canvas,
    width: res.width,
    height: res.height
});
...
},

page/index/index.vue

<template>
    <view class="container">
        <mpvue-echarts ref="pieChart" :echarts="echarts" @onInit="initChart" />
    </view>
</template>

<script>
    import * as echarts from 'echarts'
    import mpvueEcharts from 'mpvue-echarts'

    export default {
        data() {
            return {
                echarts
            }
        },
        components: {
            mpvueEcharts
        },
        methods: {
            initChart(e) {
                let {
                    canvas,
                    width,
                    height
                } = e;
                width = width - 20;
                //let canvas = this.$refs.pieChart.canvas;
                echarts.setCanvasCreator(() => canvas);
                const chart = echarts.init(canvas, null, {
                    width: width,
                    height: height
                })

                canvas.setChart(chart)
                var option = {
                    title: {
                        text: '某站點(diǎn)用戶訪問(wèn)來(lái)源',
                        subtext: '純屬虛構(gòu)',
                        x: 'center'
                    },
                    tooltip: {
                        trigger: 'item',
                        formatter: "{a} 阱驾 : {c} (dpxtes5%)"
                    },
                    legend: {
                        orient: 'vertical',
                        bottom: '10%',
                        data: ['直接訪問(wèn)', '郵件營(yíng)銷', '聯(lián)盟廣告', '視頻廣告', '搜索引擎']
                    },
                    series: [{
                        name: '訪問(wèn)來(lái)源',
                        type: 'pie',
                        radius: '55%',
                        center: ['50%', '40%'],
                        data: [{
                                value: 335,
                                name: '直接訪問(wèn)'
                            },
                            {
                                value: 310,
                                name: '郵件營(yíng)銷'
                            },
                            {
                                value: 234,
                                name: '聯(lián)盟廣告'
                            },
                            {
                                value: 135,
                                name: '視頻廣告'
                            },
                            {
                                value: 1548,
                                name: '搜索引擎'
                            }
                        ],
                        itemStyle: {
                            emphasis: {
                                shadowBlur: 10,
                                shadowOffsetX: 0,
                                shadowColor: 'rgba(0, 0, 0, 0.5)'
                            }
                        }
                    }]
                };

                chart.setOption(option)
                this.$refs.pieChart.setChart(chart);
                //return chart
            }
        }
    }
</script>

<style>
    page,
    .container {
        height: 100%;
    }

    .container {
        padding: 0 10px;
    }
</style>

完成。

接下來(lái)解決引用uni-app引用mpvue echarts超過(guò)小程序大小限制

在小程序開(kāi)發(fā)工具中編譯和預(yù)覽時(shí)怪蔑,提示Error:源碼包超出最大限制,source size 3905KB exceed max limit 2MB

參考:https://www.npmjs.com/package/mpvue-echarts
FAQ:打包結(jié)果超過(guò)小程序大小限制里覆?

使用自定義版 echarts,官網(wǎng)定制

FAQ:文件太大怎么辦缆瓣?

本項(xiàng)目默認(rèn)提供的 ECharts 文件是最新版本的包含所有組件文件喧枷,為了便于開(kāi)發(fā),提供的是未壓縮的版本弓坞。遠(yuǎn)程調(diào)試或預(yù)覽可以下載 echarts.min.js 壓縮版本隧甚。
發(fā)布時(shí),如果對(duì)文件大小要求更高渡冻,可以在 ECharts 在線定制網(wǎng)頁(yè)下載僅包含必要組件的包戚扳,并且選擇壓縮。

定制按需選擇后得到echarts.min.js
將echarts.min.js文件復(fù)制到echarts目錄下族吻。
并修改引用:

    import * as echarts from 'echarts/echarts.min.js'
    import mpvueEcharts from 'mpvue-echarts/src/echarts.vue'

重新運(yùn)行后文件得到精簡(jiǎn)帽借,小程序端可以正常編譯和預(yù)覽珠增。

h5 運(yùn)行到瀏覽器時(shí),控制臺(tái)報(bào)錯(cuò):TypeError: t.addEventListener is not a function

image.png

解決方法查看:UNI-app新引入echarts 報(bào)錯(cuò) https://blog.csdn.net/qq_36444936/article/details/86599300

3.編輯剛才拷貝的echarts.min.js砍艾,檢索“e(t.echarts={})”字符串
4.找到相鄰的(this,function(t) 串 蒂教,將其改為(this,function(t,window,document)保存即可

注:本項(xiàng)目?jī)H在微信小程序和h5測(cè)試,其他平臺(tái)暫時(shí)沒(méi)有考慮脆荷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凝垛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蜓谋,更是在濱河造成了極大的恐慌梦皮,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孤澎,死亡現(xiàn)場(chǎng)離奇詭異届氢,居然都是意外死亡欠窒,警方通過(guò)查閱死者的電腦和手機(jī)覆旭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)岖妄,“玉大人型将,你說(shuō)我怎么就攤上這事〖雠埃” “怎么了七兜?”我有些...
    開(kāi)封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)福扬。 經(jīng)常有香客問(wèn)我腕铸,道長(zhǎng),這世上最難降的妖魔是什么铛碑? 我笑而不...
    開(kāi)封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任狠裹,我火速辦了婚禮,結(jié)果婚禮上汽烦,老公的妹妹穿的比我還像新娘涛菠。我一直安慰自己,他們只是感情好撇吞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布俗冻。 她就那樣靜靜地躺著,像睡著了一般牍颈。 火紅的嫁衣襯著肌膚如雪迄薄。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天煮岁,我揣著相機(jī)與錄音讥蔽,去河邊找鬼死姚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛勤篮,可吹牛的內(nèi)容都是我干的都毒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼碰缔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼账劲!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起金抡,我...
    開(kāi)封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瀑焦,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后梗肝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榛瓮,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年巫击,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了禀晓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坝锰,死狀恐怖粹懒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情顷级,我是刑警寧澤凫乖,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站弓颈,受9級(jí)特大地震影響帽芽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜翔冀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一导街、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧橘蜜,春花似錦菊匿、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至象颖,卻和暖如春佩厚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背说订。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工抄瓦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留潮瓶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓钙姊,卻偏偏與公主長(zhǎng)得像毯辅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子煞额,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 我快要哭了思恐,怎么都做不出來(lái)了。無(wú)論是按照網(wǎng)上的教程還是把以前的代碼放進(jìn)現(xiàn)在的項(xiàng)目膊毁,都會(huì)報(bào)錯(cuò)胀莹。我不知道問(wèn)題究竟在何處...
    uesugieriislf閱讀 2,959評(píng)論 1 2
  • uni-app跨平臺(tái)框架官方教程 鏈接:https://ke.qq.com/course/343370 一、框架簡(jiǎn)...
    Neyo_涼閱讀 36,217評(píng)論 0 43
  • 前言 這是我第一次開(kāi)發(fā)小程序婚温,開(kāi)發(fā)的產(chǎn)品是音頻類的描焰,在大佬的建議下采用了mpvue,一周時(shí)間把功能都做出來(lái),由于不...
    fengxianqi閱讀 2,232評(píng)論 0 5
  • 寫在有道筆記上栅螟,uni項(xiàng)目實(shí)踐荆秦,轉(zhuǎn)過(guò)來(lái)格式不太好看,先做此記錄吧嵌巷。 看了uniapp多端開(kāi)發(fā)萄凤,感覺(jué)不錯(cuò),還有模板商...
    YellowPoint閱讀 2,366評(píng)論 0 1
  • 夜半三更坪圾,小丫頭夢(mèng)中驚醒晓折,安撫好夢(mèng)中的驚慌失措,我卻睡意全無(wú)兽泄,總覺(jué)得心里有點(diǎn)不一樣的感覺(jué)漓概,可是卻無(wú)從說(shuō)起。 放假之...
    晉文芳閱讀 249評(píng)論 0 1