国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Vue.use()在new Vue() 之前使用的原因淺析

2024-05-06 15:35:28
字體:
來源:轉載
供稿:網友

使用Vue前端框架開發有些時間了,官方文檔對于插件開發也有詳細的介紹。最近強迫癥犯了,老在想為什么Vue.use函數執行,要在Vue實例化即new Vue(options)之前。解鈴還須系鈴人,這個問題只能通過看源碼解決,于是。。。

先看Vue.use做了什么

Vue.use = function (plugin: Function | Object) {  //Vue構造函數上定義_installedPlugins 避免相同的插件注冊多次  const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))  // import是單例模式  //所以plugin不論是Fuction還是Object同一個插件都是同一個  if (installedPlugins.indexOf(plugin) > -1) {   return this  }  // additional parameters  const args = toArray(arguments, 1)  // Vue作為第一個參數傳遞給插件  args.unshift(this)  if (typeof plugin.install === 'function') {   plugin.install.apply(plugin, args)  } else if (typeof plugin === 'function') {   plugin.apply(null, args)  }  installedPlugins.push(plugin)  return this // 返回的是this,可以鏈式調用 }

do:

    檢查插件是否已經注冊,相同的插件只注冊一次 將Vue構造函數作為第一個參數,作為插件注冊調用 根據插件形式選擇調用plugin.install還是plugin 存儲已注冊插件,用于插件是否已注冊檢驗
Vue.prototype._init中合并optionsVue.prototype._init = function (options?: Object) {  const vm: Component = this  // a uid  vm._uid = uid++  let startTag, endTag  ...  vm.$options = mergeOptions(    resolveConstructorOptions(vm.constructor),    options || {},    vm   )   ...   // 掛載到dom上  if (vm.$options.el) {   vm.$mount(vm.$options.el)  }}

new Vue(options)時首先會執行this._init進行初始化,將Vue上的屬性和options進行合并,然后在進行事件、生命周期等的初始化。beforeCreate,created生命周期的hook函數也是在這里進行調用

如果Vue.use在new Vue()之后執行,this._init()時你使用的插件的內容還沒有添加到Vue.options.components、Vue.options.directives、Vue.options.filters等屬性中。所以新初始化的Vue實例中也就沒有插件內容

總結

以上所述是小編給大家介紹的Vue.use()在new Vue() 之前使用的原因淺析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對錯新站長站網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 三明市| 潜江市| 安溪县| 栖霞市| 天水市| 东阿县| 福安市| 新民市| 宁德市| 普洱| 昌邑市| 桃江县| 乐至县| 工布江达县| 滦平县| 龙井市| 芜湖县| 克东县| 南溪县| 葫芦岛市| 甘南县| 商城县| 宾阳县| 巴彦淖尔市| 潜江市| 晴隆县| 库伦旗| 泸西县| 潞城市| 安丘市| 钟祥市| 通江县| 遂平县| 日照市| 桃源县| 保康县| 元阳县| 东丽区| 会昌县| 卢氏县| 若羌县|