echarts初探:瞭解模塊化

什麼是echarts?這是官網:http://echarts.baidu.com/javascript

簡單的說就是百度提供的一些畫圖表的庫,用它你能夠簡便的畫出一些你想要的圖表效果。html

雖然蠻好用的,但對於不知道模塊化的新手(好比說我~)感受不是很好入門,我這裏大概梳理一下個人認知吧,但願能幫助到內些想嘗試echarts的人。java

咱們就以echarts首頁的教程爲例(其實人家已經寫的很好了):http://echarts.baidu.com/doc/start.html安全

我直接粘一段裏面的代碼:服務器

<!DOCTYPE html>
<head>
    <meta charset="utf-8">
    <title>ECharts</title>
</head>
<body>
    <!-- 爲ECharts準備一個具有大小(寬高)的Dom -->
    <div id="main" style="height:400px"></div>
    <!-- ECharts單文件引入 -->
    <script src="http://echarts.baidu.com/build/dist/echarts.js"></script>
    <script type="text/javascript">
        // 路徑配置(第一段)
        require.config({
            paths: {
                echarts: 'http://echarts.baidu.com/build/dist'
            }
        });
        
        // 使用(第二段)
        require(
            [
                'echarts',
                'echarts/chart/bar' // 使用柱狀圖就加載bar模塊,按需加載
            ],
            function (ec) {
                // 基於準備好的dom,初始化echarts圖表
                var myChart = ec.init(document.getElementById('main')); 
                
                var option = {
                    tooltip: {
                        show: true
                    },
                    legend: {
                        data:['銷量']
                    },
                    xAxis : [
                        {
                            type : 'category',
                            data : ["襯衫","羊毛衫","雪紡衫","褲子","高跟鞋","襪子"]
                        }
                    ],
                    yAxis : [
                        {
                            type : 'value'
                        }
                    ],
                    series : [
                        {
                            "name":"銷量",
                            "type":"bar",
                            "data":[5, 20, 40, 10, 10, 20]
                        }
                    ]
                };
        
                // 爲echarts對象加載數據 
                myChart.setOption(option); 
            }
        );
    </script>
</body>

你們能夠看到路徑配置和使用裏面都有」require「,這就是模塊化的東西。echarts爲啥要用模塊化?由於你可能在一個js裏用到多個js。好比你想在一個頁面上顯示多個圖表,柱圖,餅圖,折線圖等等,app

你須要把這些js都加載進來(每種圖的js都是獨立的)。而加載多個js很費時間,模塊化的好處是,當模塊部署完畢之後,能夠用這個工具將多個模塊合併在一個文件中,減小HTTP請求數。並且同一管理echarts

js,更有調理性。dom

其實上面代碼中的兩個」require「是幹啥的已經註釋的很清楚了。其實就是先整體上配一下路徑,而後再根據配的路徑加載須要的js進行使用。模塊化

咱們先來看看第一個require:函數

        require.config({
            paths: {
                echarts: 'http://echarts.baidu.com/build/dist'
            }
        });

首先看這句路徑的設置,你能夠理解爲把那一長串路徑用一個變量」echarts「表明了。設置路徑有利於簡化以後的加載,若是你不設置路徑多是這樣的:

// 加載一堆水果
require(['common/fruits/apple', 'common/fruits/orange', 'common/fruits/grape', 'common/fruits/pears'], function(Apple, Orange, Grape, Pears){
  // do sth
});

你設置路徑以後就是這樣的:

requirejs.config({
  paths: {
    fruits: 'common/fruits'
  }
});

// 加載一堆水果
require(['fruits/apple', 'fruits/orange', 'fruits/grape', 'fruits/pears'], function(Apple, Orange, Grape, Pears){
  // do sth
});

你還能夠設置一個baseUrl來限定這些路徑的先前路徑(好比你這些js都放在一個叫」js「的文件夾下面)

requirejs.config({
  baseUrl: 'js',
  paths: {
    fruits: 'common/fruits'
  }
});

明白了路徑的設置之後咱們再來看第二段,我簡寫一下:

        require(
            [
                'echarts',
                'echarts/chart/bar' // 使用柱狀圖就加載bar模塊,按需加載
            ],
            function (ec){
                        //do sth
            }) ;

這段代碼就是加載js,而後在回調函數中使用它們。因爲咱們剛纔已經設置了路徑,因此這裏加載的兩個js的路徑實際上是:

http://echarts.baidu.com/build/dist/echarts.js(我試了改爲'echarts/echarts'也同樣,至於爲何加載兩遍我以爲是第一遍須要require相關的支持,第二遍就是回調函數裏要用到)
http://echarts.baidu.com/build/dist/chart/bar.js

這裏的js後綴是會幫你自動補上的,你本身加了反而會出錯,它會覺得你不想使用設置的路徑,以後的回調函數的參數就是你加載的js模塊。

回調函數中 var myChart = ec.init(document.getElementById('main')); 這句就是對echarts對象的實例化。
option你能夠理解爲爲加載的圖表設置參數,最後用
myChart.setOption(option); 將實例化的對象和設置的參數綁定。

其實echarts一些簡單的使用就是一下這麼個流程:

1.echarts單文件引入

2.用require.config配置路徑

3.用require加載你要用的js(按需加載)

在回調函數中:

  4.實例化echarts對象

  5.依照本身的數據給option設置參數

  6.將echarts對象和option綁定,加載數據

大功告成。但其實模塊不是光有require的,require只是使用,還須要define來定義模塊才行,你能夠看一下echarts的那些圖表庫源碼,都是用define包裹住的。

想要了解更多模塊化能夠看 requireJS官網:http://www.requirejs.cn/

還有就是要想下載echarts用的記得搭服務器,本地的請求是不安全的。

相關文章
相關標籤/搜索