vue使用createApp時染簇,本地編譯沒有問題,打包有問題

需求描述:

實現(xiàn)一個自定義圖表拖拽功能强岸,拖拽的組件中有下拉框锻弓,輸入框,時間選擇器等組件蝌箍。為了方便青灼,決定使用Element UI組件。

1701861869158_8936DF4C-02C4-4b38-93DD-CDEDC2B68614.png

問題描述:

通過拖拽創(chuàng)建一個div元素(父元素)妓盲,通過vue的方法defineAsyncComponent引入一個異步組件杂拨,使用createApp創(chuàng)建一個vue實例,并將其掛載到父元素上悯衬。部分代碼如下

import { createApp, defineAsyncComponent } from "vue";

function createInputCom(data) {
    let oldVue = null;
    oldVue = defineAsyncComponent(() => import("../components/viewComp/input.vue"));
    let baseComp = document.querySelector("#" + data.id);
    baseComp.style.padding = "10px 20px"
    let Id = data.id;
    this.id = Id;
    let obj = {
      id: Id,
      type: 'type_label',
    };
    this.option = obj;
    this.baseVue = createApp(oldVue, obj).use(ElementPlus, { locale });
    this.baseVue.config.globalProperties =
      window.globalApp._context.config.globalProperties;
    this.baseVue.mount(baseComp);
    this.registerComponentInWindow(Id, this.baseVue, data.ElConfig)
  }
input.vue
<template>
  <div class="input-box">
    <el-input v-model="value" placeholder="請輸入" />
  </div>
</template>
<script>
import { getCurrentInstance, onMounted, ref, watch } from "vue";
import { useInstanceContent } from "../../utils/combinedFunction.js"
export default {
  setup() {
    const { proxy } = getCurrentInstance();
    const value = ref("");
    const changeInputValue = (val) => {
      value.value = val
    }
    onMounted(() => {
      useInstanceContent(proxy.$attrs.id, proxy)
    });
    return {
      value,
      changeInputValue,
    };
  },
};
</script>

<style scoped>
.input-box {
  width: 100%;
  height: 100%;
}
</style>

因為會通過外在編輯對組件的內(nèi)容進行修改弹沽,所以想要通過vue實例去獲取到內(nèi)部組件(這里指input.vue)的實例。這里通過對this.baseVae進行查看筋粗,發(fā)現(xiàn) this.baseVae_instance.vnode.el.__vueParentComponent.ctx可以訪問到內(nèi)部組件的實例(目標實例)

1701863105949_68286FF2-2C1A-4584-B641-A1B9BA959AD0.png
1701863274079_F6173AB4-7866-409a-BD50-5ADB1E7FC57C.png

找到實例贷币,將目標實例掛載到全局上以便進行使用。

function registerComponentInWindow(ID, content, config) {
    Object.prototype.toString.call(window.components) !== '[object Object]' ? window.components = {} : ''
    setTimeout(() => {
      if (content._instance.vnode.el.__vueParentComponent && content._instance.vnode.el.__vueParentComponent.ctx) {
        window.components[ID] = {
          content: content._instance.vnode.el.__vueParentComponent.ctx,
          config: {
            labelCom: {},
            selectCom: {},
            inputCom: {},
            buttonCom: {},
            dateCom: {},
            tableCom: {},
          }, // 存放一些需要的屬性
        }
      }
    }, 500) // 這里需要異步亏狰,不然取不到this.baseVue的實例役纹。
  }

這種方法在本地開發(fā)中是沒有問題,但是在打包發(fā)布之后這個方法就有問題了暇唾,打包發(fā)布之后的this.baseVae_instance值為null促脉,就導致其它地方?jīng)]法操作我們的組件。

lADPD2sQ6jlIbj7NA2rNBI4_1166_874.jpg


原因

目前還不知道策州,知道的老師可以在評論區(qū)留下知識瘸味,謝謝。


解決方案

在每個組件的mounted階段够挂,進行全局注冊

export function useInstanceContent (id, content) {
    Object.prototype.toString.call(window.components) !== '[object Object]' ? window.components = {} : ''
    Object.prototype.toString.call(window.components[id]) !== '[object Object]' ? window.components[id] = {
      content: {},
      config: {}
    } : ''
    window.components[id].content = content
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旁仿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子孽糖,更是在濱河造成了極大的恐慌枯冈,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件办悟,死亡現(xiàn)場離奇詭異尘奏,居然都是意外死亡,警方通過查閱死者的電腦和手機病蛉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門炫加,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瑰煎,“玉大人,你說我怎么就攤上這事俗孝【频椋” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵赋铝,是天一觀的道長烘挫。 經(jīng)常有香客問我,道長柬甥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任其垄,我火速辦了婚禮苛蒲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绿满。我一直安慰自己臂外,他們只是感情好,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布喇颁。 她就那樣靜靜地躺著漏健,像睡著了一般。 火紅的嫁衣襯著肌膚如雪橘霎。 梳的紋絲不亂的頭發(fā)上蔫浆,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機與錄音姐叁,去河邊找鬼瓦盛。 笑死,一個胖子當著我的面吹牛外潜,可吹牛的內(nèi)容都是我干的原环。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼处窥,長吁一口氣:“原來是場噩夢啊……” “哼嘱吗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起滔驾,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤谒麦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后哆致,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弄匕,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年沽瞭,在試婚紗的時候發(fā)現(xiàn)自己被綠了迁匠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖城丧,靈堂內(nèi)的尸體忽然破棺而出延曙,到底是詐尸還是另有隱情,我是刑警寧澤亡哄,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布枝缔,位于F島的核電站,受9級特大地震影響蚊惯,放射性物質(zhì)發(fā)生泄漏愿卸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一截型、第九天 我趴在偏房一處隱蔽的房頂上張望趴荸。 院中可真熱鬧,春花似錦宦焦、人聲如沸发钝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酝豪。三九已至,卻和暖如春精堕,著一層夾襖步出監(jiān)牢的瞬間孵淘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工歹篓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留夺英,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓滋捶,卻偏偏與公主長得像痛悯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子重窟,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容

  • vue的底層原理? vue組件之間的通信载萌? JS中判斷數(shù)據(jù)類型的方法有幾種? 最常見的判斷方法:typeof 判斷...
    螞蟻想賽跑閱讀 1,139評論 1 1
  • $HTML, HTTP巡扇,web綜合問題 1扭仁、前端需要注意哪些SEO 2、 的title和alt有什么區(qū)別 3厅翔、HT...
    Hebborn_hb閱讀 4,584評論 0 20
  • 1.vue優(yōu)點乖坠?答:輕量級框架:只關(guān)注視圖層,是一個構(gòu)建數(shù)據(jù)的視圖集合刀闷,大小只有幾十kb熊泵;簡單易學:國人開發(fā)仰迁,中文...
    上海_前端_求內(nèi)推閱讀 354評論 0 1
  • 目錄 1.深入淺出Vue響應式原理[https://segmentfault.com/a/119000001970...
    Grandperhaps閱讀 372評論 0 6
  • Vuejs部分 1.vue優(yōu)點? 答:輕量級框架:只關(guān)注視圖層顽分,是一個構(gòu)建數(shù)據(jù)的視圖集合徐许,大小只有幾十kb; 簡單...
    NaN2019閱讀 1,025評論 0 0