最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue.use與Vue.prototype的區(qū)別及說明

 更新時間:2022年12月07日 16:55:18   作者:如花菇?jīng)? 
這篇文章主要介紹了Vue.use與Vue.prototype的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Vue.use與Vue.prototype的區(qū)別

本人對Vue的原型prototype有了解過,知道這是啥玩意,但對于Vue.use只知會用,卻不知其意。今天來看看。

示例

// 引入公共方法擴展
import common from '@/prototypeEx/common.js'
Vue.prototype.common = common
// 引入公共緩存方法
import cacheEx from '@/prototypeEx/cacheEx.js'
Vue.prototype.cacheEx = cacheEx
// 引入大數(shù)據(jù)展示 插件
const echarts = require('echarts')
Vue.prototype.$echarts = echarts
?
import uploader from 'vue-simple-uploader'
Vue.use(uploader)
// 引人自己封裝的全局注冊的公共組件
import ztable from '@/components/index.js'
Vue.use(ztable)

解答(本人看完豁然開朗)

Vue.use和Vue.prototype沒有本質(zhì)區(qū)別,Vue.use就是在Vue.prototype基礎(chǔ)上又封裝了一層而已,他們實現(xiàn)的原理都是在Vue.prototype上添加了一個方法,Vue.prototype適合于注冊Vue生態(tài)外的插件,Vue.use適合于注冊Vue生態(tài)內(nèi)的插件。

分析過程

1.$echarts變量前加上$,是防止被組件中的變量意外覆蓋。

vue.use源碼

Vue.use = function (plugin) {
if (plugin.installed) {
? return;
}
// additional parameters
var args = toArray(arguments, 1);
args.unshift(this);
if (typeof plugin.install === 'function') {
? plugin.install.apply(plugin, args);
} else {
? plugin.apply(null, args);
}
plugin.installed = true;
return this;
};
?
再來看一下一個插件的install方法內(nèi)容, 我們居然看到了Vue.prototype.$toast = toast;,
// 準(zhǔn)備好 install 方法 給 Vue.use() 使用
const install = function (Vue) {
if (install.installed) return;
install.installed = true;
?
// 將包裝好的 toast 掛到Vue的原型上,作為 Vue 實例上的方法
Vue.prototype.$toast = toast;
}

小結(jié):

看了源碼才知道原來`Vue.use`主要是執(zhí)行`install`方法,而`install`主要也是執(zhí)行`Vue.prototype`方法。

所以,其實`Vue.use()`方法的核心就是`Vue.prototype`,只不過又封裝了一層,更加的靈活,擴展性更好。

### 總結(jié) 把vue理解成一棵樹,`Vue.use`和`Vue.prototype`都是在這顆樹上掛載插件的方式,不同之處是使用`vue.prototype`,插件不需要實現(xiàn)`install`方法,簡單粗暴,拿來就用,但是靈活性不如`Vue.use()`, 而`Vue.use()`,卻要求插件必須實現(xiàn)`instal`方法或者該插件本身就是函數(shù),在`install`方法可以完成自己的邏輯, 所以`Vue.use()`的方式更加的強大,靈活,擴展性更好。

但是兩者并沒有高低之分, 只是有著各自的應(yīng)用場景,`Vue.prototype`適合于非Vue生態(tài)的插件,而`Vue.use()`適合于Vue生態(tài)內(nèi)的插件,如echarts,兩者互相配合,一個簡單實用,一個靈活擴展性好。而且,`Vue.use`的實現(xiàn)依賴于`Vue.prototype`,最本質(zhì)的理解就是`Vue.use`包裹著`Vue.prototype`進一步的封裝了一次。

關(guān)于Vue.prototype和Vue.use()的疑問

問題描述

在 main.js 文件中,通過 Vue.prototype 和 Vue.use() 兩種方式注冊插件有什么不同呢?

每一個Vue組件都是Vue的實例,所以組件內(nèi)this可以拿到Vue.prototype上添加的屬性和方法。

Vue.use() 相當(dāng)于使用一個中間件,用于注冊第三方庫。

// 在組件中,通過 this.$post 來使用方法?
import request from 'utils/request'
Vue.prototype.$post = request.post
?
import Antd from 'ant-design-vue'
import db from 'utils/localstorage'
?
Vue.use(Antd)
Vue.use({
? install (Vue) {
? ? Vue.prototype.$db = db
? }
})
?
new Vue({
? router,
? store,
? render: h => h(App)
}).$mount('#app')

首先,不管你采用哪種方式,最終實現(xiàn)的調(diào)用方式都是

vm.api()

也就是說,兩種方法,實現(xiàn)的原理都是在Vue.prototype上添加了一個方法。所以結(jié)論是“沒有區(qū)別”。

再來說說Vue.use()到底干了什么。

我們知道,Vue.use()可以讓我們安裝一個自定義的Vue插件。為此,我們需要聲明一個install函數(shù)

// 創(chuàng)建一個簡單的插件 say.js
var install = function(Vue) {
? if (install.installed) return // 如果已經(jīng)注冊過了,就跳過
? install.installed = true
?
? Object.defineProperties(Vue.prototype, {
? ? $say: {
? ? ? value: function() {console.log('I am a plugin')}
? ? }
? })
}
module.exports = install

然后我們要注冊這個插件

import say from './say.js'
import Vue from 'vue'
?
Vue.use(say)

這樣,在每個Vue的實例里我們都能調(diào)用say方法了。

我們來看Vue.use方法內(nèi)部是怎么實現(xiàn)的

Vue.use = function (plugin) {
? if (plugin.installed) {
? ? return;
? }
? // additional parameters
? var args = toArray(arguments, 1);
? args.unshift(this);
? if (typeof plugin.install === 'function') {
? ? plugin.install.apply(plugin, args);
? } else {
? ? plugin.apply(null, args);
? }
? plugin.installed = true;
? return this;
};

其實也就是調(diào)用了這個install方法而已。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue?代碼壓縮優(yōu)化方式

    vue?代碼壓縮優(yōu)化方式

    這篇文章主要介紹了vue?代碼壓縮優(yōu)化方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • vue+element-ui實現(xiàn)頭部導(dǎo)航欄組件

    vue+element-ui實現(xiàn)頭部導(dǎo)航欄組件

    這篇文章主要為大家詳細介紹了vue+element-ui實現(xiàn)頭部導(dǎo)航欄組件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 在Vue 3中使用OpenLayers讀取WKB數(shù)據(jù)并顯示圖形效果

    在Vue 3中使用OpenLayers讀取WKB數(shù)據(jù)并顯示圖形效果

    WKB作為一種緊湊的二進制格式,在處理和傳輸空間數(shù)據(jù)時具有明顯優(yōu)勢,本文介紹了如何在Vue 3中使用OpenLayers讀取WKB格式的空間數(shù)據(jù)并顯示圖形,感興趣的朋友一起看看吧
    2024-12-12
  • vue對el-autocomplete二次封裝增加下拉分頁

    vue對el-autocomplete二次封裝增加下拉分頁

    項目中的聯(lián)想輸入框現(xiàn)在都是采用的el-autocomplete實現(xiàn)的,但是數(shù)據(jù)增多就會需要做分頁處理,本文主要介紹了vue對el-autocomplete二次封裝增加下拉分頁,感興趣的可以了解一下
    2022-03-03
  • vue踩坑記-在項目中安裝依賴模塊npm install報錯

    vue踩坑記-在項目中安裝依賴模塊npm install報錯

    這篇文章主要介紹了vue踩坑記-在項目中安裝依賴模塊npm install報錯,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • vue實現(xiàn)點擊當(dāng)前標(biāo)簽高亮效果【推薦】

    vue實現(xiàn)點擊當(dāng)前標(biāo)簽高亮效果【推薦】

    這篇文章主要介紹了vue實現(xiàn)點擊當(dāng)前標(biāo)簽高亮效果的思路詳解,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-06-06
  • vue注冊組件的幾種方式總結(jié)

    vue注冊組件的幾種方式總結(jié)

    下面小編就為大家分享一篇vue注冊組件的幾種方式總結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Vue中使用mixins混入方式

    Vue中使用mixins混入方式

    這篇文章主要介紹了Vue中使用mixins混入方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Vue.js進階知識點總結(jié)

    Vue.js進階知識點總結(jié)

    給大家分享了關(guān)于Vue.js想成為高手的5個總要知識點,需要的朋友可以學(xué)習(xí)下。
    2018-04-04
  • vue中v-model動態(tài)生成的實例詳解

    vue中v-model動態(tài)生成的實例詳解

    這篇文章主要介紹了vue中v-model動態(tài)生成的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10

最新評論

孟州市| 临夏县| 永吉县| 城固县| 鄄城县| 且末县| 景谷| 榆树市| 辽源市| 石景山区| 田东县| 正宁县| 拜泉县| 游戏| 恭城| 佛坪县| 大余县| 光山县| 孝义市| 汨罗市| 绍兴市| 曲沃县| 永兴县| 嫩江县| 龙岩市| 报价| 宝兴县| 肥城市| 黑山县| 云南省| 武穴市| 绥江县| 静乐县| 黎平县| 沁水县| 南宁市| 鄯善县| 金坛市| 南雄市| 尉犁县| 和硕县|