欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue如何把組件方法暴露到window對(duì)象中

 更新時(shí)間:2022年09月14日 15:47:42   作者:王喬治威爾金斯瑪格麗特湯姆森希爾德薩拉陽(yáng)  
這篇文章主要介紹了vue如何把組件方法暴露到window對(duì)象中,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

把組件方法暴露到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祖孫組件之間的數(shù)據(jù)傳遞案例

    vue祖孫組件之間的數(shù)據(jù)傳遞案例

    這篇文章主要介紹了vue祖孫組件之間的數(shù)據(jù)傳遞案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • vue計(jì)算屬性+vue中class與style綁定(推薦)

    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需要注意的坑及解決

    這篇文章主要介紹了使用elementUI表單校驗(yàn)函數(shù)validate需要注意的坑及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • vue2左側(cè)菜單欄收縮展開(kāi)功能實(shí)現(xiàn)

    vue2左側(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-04
  • Vue2+SpringBoot實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出到csv文件并下載的使用示例

    Vue2+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-10
  • Vue3非遞歸渲染Tree組件的初步實(shí)現(xiàn)代碼

    Vue3非遞歸渲染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)證的方法

    策略模式實(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
  • Vue3的vue-router超詳細(xì)使用示例教程

    Vue3的vue-router超詳細(xì)使用示例教程

    這篇文章主要介紹了Vue3的vue-router超詳細(xì)使用,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • 解決vue-cli中stylus無(wú)法使用的問(wèn)題方法

    解決vue-cli中stylus無(wú)法使用的問(wèn)題方法

    這篇文章主要介紹了解決vue-cli中stylus無(wú)法使用的問(wèn)題方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Vue實(shí)現(xiàn)tab切換的兩種方法示例詳解

    Vue實(shí)現(xiàn)tab切換的兩種方法示例詳解

    這篇文章主要介紹了Vue實(shí)現(xiàn)tab切換的兩種方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-11-11

最新評(píng)論