vue如何把組件方法暴露到window對(duì)象中
把組件方法暴露到window對(duì)象中
方法 1(簡(jiǎn)單,但不推薦)
mounted() { ? // 2. 在mounted階段聲明globalFn,來(lái)調(diào)用組件內(nèi)的方法 ? window.globalFn = () => { ? ? this.getDetail() ? } }, methods: { ? // 1. 組件內(nèi)有一個(gè)getDetail方法,需要暴露給window,以供嵌入該頁(yè)面的客戶端調(diào)用 ? getDetail() { ? ? // 業(yè)務(wù)邏輯 ? } }
優(yōu)點(diǎn):
- 簡(jiǎn)單: 適合暴露的方法不太多的系統(tǒng)
缺點(diǎn):
- 變量名易沖突: 如果需要暴露的方法越來(lái)越多,那么 window 對(duì)象中的全局變量也會(huì)越來(lái)越多,容易變量名沖突
- 位置分散: 隨著業(yè)務(wù)的復(fù)雜化,暴露的方法可能分散在各個(gè).vue 文件中,不容易管理
方法 2(推薦,解決方法 1 的痛點(diǎn))
1. 在 main.js 中把 Vue 對(duì)象暴露給 window
// ... const vm = new Vue({ ? router, ? store, ? render: (h) => h(App) }).$mount('#app') window.vm = vm // 只把vm暴露給window,以后都在vm中做文章 // ...
2. 在一個(gè)你喜歡的目錄下新建 js 文件,該文件用來(lái)存放需要暴露出去的方法
(我是把這個(gè)文件放在了 @/utils/export2vmFunction.js 下)
exports.install = function (Vue) { ? // 把需要暴露出去的方法掛載到Vue原型上,避免了全局變量過(guò)多的問(wèn)題 ? // 全局方法都在這里,方便管理 ? Vue.prototype.globalFn1 = function () { ? ? const component = findComponentDownward(this, 'RecommendRecord1') ? ? component.getDetail1() ? } ? Vue.prototype.globalFn2 = function () { ? ? const component = findComponentDownward(this, 'RecommendRecord2') ? ? component.getDetail2() ? } ? // ... } /** ?* 由一個(gè)組件,向下找到最近的指定組件 ?* @param {*} context 當(dāng)前上下文,比如你要基于哪個(gè)組件來(lái)向上尋找,一般都是基于當(dāng)前的組件,也就是傳入 this ?* @param {*} componentName 要找的組件的 name ?*/ function findComponentDownward(context, componentName) { ? const childrens = context.$children ? let children = null ? if (childrens.length) { ? ? for (const child of childrens) { ? ? ? const name = child.$options.name ? ? ? if (name === componentName) { ? ? ? ? children = child ? ? ? ? break ? ? ? } else { ? ? ? ? children = findComponentDownward(child, componentName) ? ? ? ? if (children) break ? ? ? } ? ? } ? } ? return children }
注:如果對(duì)上述找組件的方法不熟悉的小伙伴可以移步到:找到任意組件實(shí)例的方法
3. 把目光在回到 main.js 中,導(dǎo)入剛剛聲明好的 js 文件
// ... import Vue from 'vue' import vmFunction from '@/utils/export2vmFunction' Vue.use(vmFunction) // ...
4. 大功告成
經(jīng)過(guò)上述三步操作后,就可以用vm.globalFn1()來(lái)調(diào)用組件內(nèi)的方法了
優(yōu)點(diǎn):
- 方便管理: 所有方法都在一個(gè)文件中
- 全局變量少: 只有vm一個(gè)變量
將方法綁定到window對(duì)象下,給app端調(diào)用
通過(guò)jsBridge方法,H5可以調(diào)用客戶端(ios,android)的內(nèi)部方法,
同樣,客戶端也需要能調(diào)用H5頁(yè)面里定義的js方法,
但是在vue里,所有的方法都是在組件內(nèi)部聲明的,也只能在組件內(nèi)部調(diào)用,
原生調(diào)用h5方法必須定義在window對(duì)象下
mounted(){ // 將scanResult方法綁定到window下面,提供給原生調(diào)用 //(方法名scanResult是原生定義好的,掃描成功后會(huì)主動(dòng)調(diào)用window下的該方法) window['scanResult'] = (val) => { this.getScanVal(val) } }, methods:{ //原生調(diào)用scanResult方法后執(zhí)行g(shù)etScanVal方法,獲取到val getScanVal(val){ console.log('掃一掃獲取到的:'+ val) }, //點(diǎn)擊事件調(diào)取掃一掃功能 doScan(){ this.demo.doScan()//調(diào)用原生方法開(kāi)啟掃一掃 }, }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue計(jì)算屬性+vue中class與style綁定(推薦)
這篇文章主要介紹了vue計(jì)算屬性+vue中class與style綁定,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03使用elementUI表單校驗(yàn)函數(shù)validate需要注意的坑及解決
這篇文章主要介紹了使用elementUI表單校驗(yàn)函數(shù)validate需要注意的坑及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06vue2左側(cè)菜單欄收縮展開(kāi)功能實(shí)現(xiàn)
vue2左側(cè)菜單欄收縮展開(kāi)目前是非常常見(jiàn)的,我們?cè)谌粘i_(kāi)發(fā)過(guò)程中經(jīng)常會(huì)碰到,這篇文章給大家介紹vue2左側(cè)菜單欄收縮展開(kāi)功能,感興趣的朋友跟隨小編一起看看吧2024-04-04Vue2+SpringBoot實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出到csv文件并下載的使用示例
本文主要介紹了Vue2+SpringBoot實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出到csv文件并下載,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-10-10Vue3非遞歸渲染Tree組件的初步實(shí)現(xiàn)代碼
這篇文章主要介紹了Vue3非遞歸渲染Tree組件的初步實(shí)現(xiàn),文中通過(guò)代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定幫助,需要的朋友可以參考下2024-05-05策略模式實(shí)現(xiàn) Vue 動(dòng)態(tài)表單驗(yàn)證的方法
策略模式(Strategy Pattern)又稱政策模式,其定義一系列的算法,把它們一個(gè)個(gè)封裝起來(lái),并且使它們可以互相替換。封裝的策略算法一般是獨(dú)立的,策略模式根據(jù)輸入來(lái)調(diào)整采用哪個(gè)算法。這篇文章主要介紹了策略模式實(shí)現(xiàn) Vue 動(dòng)態(tài)表單驗(yàn)證,需要的朋友可以參考下2019-09-09解決vue-cli中stylus無(wú)法使用的問(wèn)題方法
這篇文章主要介紹了解決vue-cli中stylus無(wú)法使用的問(wèn)題方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Vue實(shí)現(xiàn)tab切換的兩種方法示例詳解
這篇文章主要介紹了Vue實(shí)現(xiàn)tab切換的兩種方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-11-11