自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Vue.use(ElementUI) 做了什么?

開(kāi)發(fā) 前端
Vue 提供了一種插件機(jī)制,可以給 Vue 擴(kuò)充一些屬性,其實(shí)這個(gè)插件比較"可笑",什么也沒(méi)做。

[[387537]]

本文轉(zhuǎn)載自微信公眾號(hào)“素燕”(gh_a97f4df5b7b9)。

在使用 ElementUI 組件的時(shí)候,通常我們會(huì)這么寫(xiě):

  1. import ElementUI from 'element-ui'; 
  2. Vue.use(ElementUI); 

這樣寫(xiě)完后,在我們自定義的組件中既可以直接使用:

  1. <template> 
  2.     <div> 
  3.         <el-button type="primary">我是素燕</el-button> 
  4.     </div> 
  5. </template> 

通過(guò)本文我們來(lái)分析下它是如何實(shí)現(xiàn)的。

Vue 提供了一種插件機(jī)制,可以給 Vue 擴(kuò)充一些屬性,其實(shí)這個(gè)插件比較"可笑",什么也沒(méi)做,不信看下源碼:

Vue 內(nèi)部只是幫你判斷了下有沒(méi)有重復(fù)注冊(cè),并調(diào)用了你傳給它的函數(shù),其實(shí)我自已也可以調(diào)用,反而饒了一圈,可能框架設(shè)計(jì)有自己的考慮吧。

按官方的說(shuō)法,插件可以是一個(gè)函數(shù)或者是包含install函數(shù)的對(duì)象。Element-ui 可以一次性把所有的組件引入,也可以引入其中某一個(gè),它內(nèi)部其實(shí)使用的就是插件機(jī)制。我們動(dòng)手自己實(shí)現(xiàn)一下:

目錄結(jié)構(gòu)如下:

SyElement/index.js:

定義了一個(gè)插件,該插件中通過(guò) Vue 提供的全局函數(shù) component 在全局注冊(cè)了組件 SyInfo 和 SyMessage,看代碼:

  1. import SyInfo from './SyInfo/index'; 
  2. import SyMessage from './SyMessage/index'; 
  3. import log from './log'; 
  4.  
  5. export default { 
  6.     install(Vue, options) { 
  7.         // 全局注冊(cè)組件 SyInfo 
  8.         Vue.component(SyInfo.name, SyInfo); 
  9.         // 全局注冊(cè)組件 SyMessage 
  10.         Vue.component(SyMessage.name, SyMessage); 
  11.  
  12.         // 給 Vue 添加一個(gè)全局函數(shù),該函數(shù)可在所有的組件中使用 
  13.         Vue.prototype.$loglog = log; 
  14.     } 

由于要支持單組件使用,故每個(gè)組件其實(shí)也是一個(gè)插件。

  1. import SyMessage from './src/component.vue'; 
  2. // 提供一個(gè) install 函數(shù) 
  3. SyMessage.install = function(Vue) { 
  4.     Vue.component(SyMessage.name, SyMessage); 
  5.  
  6. export default SyMessage; 

component.vue 就是一個(gè)組件的具體實(shí)現(xiàn):

  1. <template> 
  2.     <div class="sy-info"> 
  3.         剖析element-ui的實(shí)現(xiàn)方式 
  4.     </div> 
  5. </template> 
  6.  
  7. <script> 
  8. export default { 
  9.     name: 'SyMessage' 
  10. </script> 

SyMessage 和 SyInfo 的實(shí)現(xiàn)一樣。到此便可以和 Element-ui 一樣的方式使用了:

  1. import ElementUI from 'element-ui'; 
  2. Vue.use(ElementUI); 
  1. <template> 
  2.  
  3.     <div> 
  4.         <sy-info></sy-info> 
  5.         <sy-message></sy-message> 
  6.     </div> 
  7. </template> 

多說(shuō)一句:有時(shí)候,有些業(yè)務(wù)需求需要在每個(gè)組件中使用某個(gè)服務(wù),比如數(shù)據(jù)統(tǒng)計(jì),其實(shí)可以在 Vue 全局中掛載一個(gè)函數(shù),這樣在每個(gè)組件中即可使用,比如文章提到的 log 就是在全局掛載的一個(gè)函數(shù):

  1. Vue.prototype.$loglog = log; 

在所有的組件中既可以這樣使用:

  1. this.$log({ 
  2.     uid: 'suyan' 
  3. }); 

 

責(zé)任編輯:趙寧寧 來(lái)源: 素燕
相關(guān)推薦

2022-02-22 13:14:30

Vue自定義指令注冊(cè)

2011-04-19 10:04:25

NeopPIshell網(wǎng)站后門

2025-02-21 10:01:35

2011-11-29 09:10:11

Hadoop

2020-12-25 09:38:07

Vue前端代碼

2016-11-17 15:35:51

RxJava操作Subscriber

2015-09-16 15:01:30

PHP內(nèi)核

2021-08-06 22:45:09

人工智能AI

2017-12-06 14:35:01

OpenStackCeph存儲(chǔ)

2014-08-10 14:35:23

2018-05-22 08:37:02

Ceph存儲(chǔ)存儲(chǔ)系統(tǒng)

2021-01-03 10:37:50

前端開(kāi)發(fā)技術(shù)

2018-09-27 18:40:21

技術(shù)管理項(xiàng)目管理

2019-06-12 09:50:23

selectMySQLSQL

2022-04-13 14:15:50

人工智能機(jī)器人上海

2018-09-07 09:33:52

技術(shù)管理程序員

2020-08-13 08:04:31

配置跨域框架

2017-10-21 10:12:05

戴爾

2010-03-12 14:28:52

三層交換技術(shù)

2023-06-07 08:13:46

PixiJSCanvas 庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)