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

關(guān)于vue3編寫掛載DOM的插件問題

 更新時(shí)間:2021年07月27日 09:13:41   作者:孤云獨(dú)去閑  
這篇文章主要介紹了vue3編寫掛載DOM的插件的問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

vue3 跟 vue2 相比,多了一個(gè) app 的概念,vue3 項(xiàng)目的創(chuàng)建也變成了

// main.js
import { createApp } from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus'

const app = createApp(App)
app.use(ElementPlus)   // 使用餓了么框架
app.mount('#app')

所以 Vue.extend 也沒有了。

vue2創(chuàng)建一個(gè)插件:

export default function install (Vue) {
  let app = Vue.extend({
    render (h) {
      return h('div', {
        style: {
          display: this.isShow ? 'flex' : 'none'
        }
      })
    }
  })

  let appDom = new app({
    el: document.createElement('div'),
    data: function () {
      return {
        isShow: false
      }
    }
  })

  function show () {
    appDom.isShow = true
  }

  function hide () {
    appDom.isShow = false
  }
  Vue.prototype.$show = show
  Vue.prototype.$hide = hide
  document.body.appendChild(appDom.$el)
}

vue3創(chuàng)建一個(gè)插件:

import { createApp, h } from 'vue'

export default function install (App) {
  let app = createApp({
    data() {
      return {
        isShow: false,
      }
    },
    render() {
      return h('div', {
        style: {
          display: this.isShow ? 'flex' : 'none'
        }
      })
    }
  })
  
  const vNodeDom = document.createElement('div')
  document.body.appendChild(vNodeDom)
  const vm = app.mount(vNodeDom)

  App.config.globalProperties.$show = function () {
    vm.isShow = true
  }

  App.config.globalProperties.$hide = function () {
    vm.isShow = false
  }
}

對(duì)比可以發(fā)現(xiàn), vue3 的 DOM掛載方式是新創(chuàng)建一個(gè) app 然后調(diào)用 mount() 方法插入到頁(yè)面中。

全局方法的掛載方式也從 vue2 的 Vue.prototype 到 vue3 的 App.config.globalProperties。

除此之外,vue3 的插件如果用 createApp 來(lái)創(chuàng)建新的DOM結(jié)構(gòu)插入到頁(yè)面的話,與 main.js 中創(chuàng)建的 app 是隔絕開來(lái)的,這意味著 main.js 中 use 的組件和公共方法在 這個(gè)插件中無(wú)法使用。

// myCom.vue
<template>
  <el-button>按鈕</el-button>
</template>


// myCom.js
import { createApp, h } from 'vue'
import myCom from './myCom.vue'
export default function install (App) {
  let app = createApp({
    data() {
      return {
        isShow: false
      }
    },
    render() {
      return h(myCom)
    }
  })

  const vNodeDom = document.createElement('div')
  document.body.appendChild(vNodeDom)
  app.mount(vNodeDom)
}

上面的例子中,el-button 是無(wú)法正常顯示的,控制臺(tái)會(huì)報(bào)錯(cuò):

[Vue warn]: Failed to resolve component: el-button

 所以,如果既想要新建DOM,又要使用main.js全局注冊(cè)的組件和方法,那就不能用 createApp,

 在請(qǐng)教了 vue3 的開發(fā)大佬后,有了以下方案:(issues

import { render, h } from 'vue'
import myCom from './myCom.vue'

export default function install (App) {
  let vNode = h({
    data() {
      return {
        isShow: false,
      }
    },
    render() {
      return h(myCom)
    }
  })

  const vNodeDom = document.createElement('div')
  document.body.appendChild(vNodeDom)
  vNode.appContext = App._context
  render(vNode, vNodeDom)

  App.config.globalProperties.$show = function () {
    vNode.component.proxy.isShow = true
  }

  App.config.globalProperties.$hide = function () {
    vNode.component.proxy.isShow = false
  }
}

 這次沒有創(chuàng)建新的 app,而是通過給 vNode 復(fù)制原來(lái) app 的 context,從而達(dá)到組件和公共方法共用,

 新創(chuàng)建的插件屬性和方法通過 vNode.component.proxy 來(lái)訪問。

el-button 也正確的解析出來(lái)了

到此這篇關(guān)于vue3如何編寫掛載DOM的插件的文章就介紹到這了,更多相關(guān)vue掛載dom插件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue項(xiàng)目使用axios封裝request請(qǐng)求的過程

    vue項(xiàng)目使用axios封裝request請(qǐng)求的過程

    這篇文章主要介紹了vue項(xiàng)目使用axios封裝request請(qǐng)求,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • 基于vue中keep-alive緩存問題的解決方法

    基于vue中keep-alive緩存問題的解決方法

    今天小編就為大家分享一篇基于vue中keep-alive緩存問題的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-09-09
  • Vue實(shí)現(xiàn)點(diǎn)擊箭頭上下移動(dòng)效果

    Vue實(shí)現(xiàn)點(diǎn)擊箭頭上下移動(dòng)效果

    這篇文章主要介紹了Vue實(shí)現(xiàn)點(diǎn)擊箭頭上下移動(dòng)效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 對(duì)vue中v-on綁定自定事件的實(shí)例講解

    對(duì)vue中v-on綁定自定事件的實(shí)例講解

    今天小編就為大家分享一篇對(duì)vue中v-on綁定自定事件的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-09-09
  • Vue使用虛擬dom進(jìn)行渲染view的方法

    Vue使用虛擬dom進(jìn)行渲染view的方法

    這篇文章主要介紹了Vue使用虛擬dom進(jìn)行渲染view的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Axios代理配置及封裝響應(yīng)攔截處理方式

    Axios代理配置及封裝響應(yīng)攔截處理方式

    這篇文章主要介紹了Axios代理配置及封裝響應(yīng)攔截處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue3 編寫自定義指令插件的示例代碼

    Vue3 編寫自定義指令插件的示例代碼

    這篇文章主要介紹了Vue3 編寫自定義指令插件的示例代碼,主要包括編寫自定義插件,在 main.ts 中加載啟用插件的代碼介紹,對(duì)Vue3自定義指令插件相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-07-07
  • Vue項(xiàng)目引入PWA的步驟

    Vue項(xiàng)目引入PWA的步驟

    這篇文章主要介紹了Vue項(xiàng)目引入PWA的步驟,幫助大家更好的理解和學(xué)習(xí)使用vue,感興趣的朋友可以了解下
    2021-04-04
  • Vue組件庫(kù)發(fā)布到npm詳解

    Vue組件庫(kù)發(fā)布到npm詳解

    本片文章給大家詳細(xì)介紹了如何將Vue組件庫(kù)發(fā)布到npm的方法以及代碼示例分享,感興趣的朋友參考學(xué)習(xí)下。
    2018-02-02
  • 如何在Vue中抽離接口配置文件

    如何在Vue中抽離接口配置文件

    這篇文章主要介紹了Vue中抽離接口配置文件的問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10

最新評(píng)論

陈巴尔虎旗| 莫力| 松滋市| 公主岭市| 疏勒县| 三穗县| 兴国县| 临猗县| 大连市| 河东区| 天津市| 金昌市| 龙胜| 肇庆市| 蓝山县| 卫辉市| 弋阳县| 阿鲁科尔沁旗| 洛隆县| 昭平县| 保靖县| 如东县| 天津市| 丰顺县| 江华| 青川县| 库尔勒市| 甘孜县| 唐山市| 嵩明县| 浦东新区| 蒙城县| 深州市| 张家口市| 锦屏县| 清徐县| 仁化县| 五峰| 宝山区| 贵南县| 两当县|