我們在使用Vue做項目開發(fā)的時候,看到不少輪子都是通過Vue.use來進行使用,感覺甚是高大上。 其實這些輪子都可以稱之為插件,它的功能范圍沒有嚴格的限制,一般包含如下幾種:
無論大小,插件要實現(xiàn)的功能無非就是上述這幾種。但是,這并不妨礙我們創(chuàng)造出復雜的插件,不過我們還是希望給用戶提供一個簡單的使用方法,他不需要關(guān)注插件內(nèi)部做了些什么。固Vue提供了use方法,專門來在new Vue()之前使用插件。 不管是官方提供的插件(例如vue-router、vuex),還是第三方的插件(例如ElementUI 接下來,我們就來看下這個神秘的use方法是如何實現(xiàn)的。
一個插件內(nèi)部大概就是如上所示,其實也不外乎上述那幾種東西,甚是簡單????。接下來我們就來看下真實的案例ElementUI: 我們不難發(fā)現(xiàn),其實自己來實現(xiàn)一個插件也是超級簡單,只要對外暴露一個install方法即可,在使用Vue.use的時候,會調(diào)用這個方法。所以我們只要將要實現(xiàn)的內(nèi)容放到install內(nèi)部即可。這樣的好處就是插件需要一開始調(diào)用的方法都封裝在install里面,更加精簡和可拓展性更高。 大家可能也有注意到,這里的install其實是將所有的組件全部引入了。作為一個龐大的插件庫,這樣可能會有一些性能問題。用過的ElementUI的同學都知道,它是支持按需引入的,其實在上面的示例中也可以發(fā)現(xiàn)一些蛛絲馬跡。 這里將每個組件都單獨都導出了,而在每個組件內(nèi)部,也類似的暴露了install來組件每個組件,這樣就可以單獨Vue.use每個組件,從而實現(xiàn)按需引入的目的。 除了上述內(nèi)容之外,還有幾點值得我們注意一下:
if (typeof plugin.install === 'function') { plugin.install.apply(plugin, args); } else if (typeof plugin === 'function') { plugin.apply(null, args); }
其實并不神秘,內(nèi)部還是我們平時使用的這些東西,僅僅只是給他們套上了一層高端的外衣而已。我們在開發(fā)中,也可以嘗試使用這種方式,不僅簡單,而且有逼格???? |
|