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

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)文章

  • django+vue實(shí)現(xiàn)注冊(cè)登錄的示例代碼

    django+vue實(shí)現(xiàn)注冊(cè)登錄的示例代碼

    這篇文章主要介紹了django+vue實(shí)現(xiàn)注冊(cè)登錄的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Vue中的字符串模板的使用

    Vue中的字符串模板的使用

    本篇文章主要介紹了Vue中的字符串模板的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • 基于vue中keep-alive緩存問(wèn)題的解決方法

    基于vue中keep-alive緩存問(wèn)題的解決方法

    今天小編就為大家分享一篇基于vue中keep-alive緩存問(wèn)題的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • el-select 數(shù)據(jù)回顯,只顯示value不顯示lable問(wèn)題

    el-select 數(shù)據(jù)回顯,只顯示value不顯示lable問(wèn)題

    這篇文章主要介紹了el-select 數(shù)據(jù)回顯,只顯示value不顯示lable問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue+Element-ui的el-table的多級(jí)內(nèi)容渲染問(wèn)題

    vue+Element-ui的el-table的多級(jí)內(nèi)容渲染問(wèn)題

    這篇文章主要介紹了vue+Element-ui的el-table的多級(jí)內(nèi)容渲染問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue輸入框組件開(kāi)發(fā)過(guò)程詳解

    vue輸入框組件開(kāi)發(fā)過(guò)程詳解

    這篇文章主要為大家詳細(xì)介紹了vue輸入框組件開(kāi)發(fā)過(guò)程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue3如何使用ref獲取元素

    vue3如何使用ref獲取元素

    這篇文章主要介紹了vue3如何使用ref獲取元素,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • vue項(xiàng)目打包并部署到Linux服務(wù)器的詳細(xì)過(guò)程

    vue項(xiàng)目打包并部署到Linux服務(wù)器的詳細(xì)過(guò)程

    我們?cè)跁?huì)開(kāi)發(fā)項(xiàng)目的同時(shí),也應(yīng)該了解一下項(xiàng)目是如何部署到服務(wù)器的,下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目打包并部署到Linux服務(wù)器的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • axios攜帶cookie配置詳解(axios+koa)

    axios攜帶cookie配置詳解(axios+koa)

    這篇文章主要介紹了axios攜帶cookie配置詳解(axios+koa),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Vue中EpicEditor和vue-quill-editor的使用詳解

    Vue中EpicEditor和vue-quill-editor的使用詳解

    EpicEditor和Vue-quill-editor都是基于Quill.js的富文本編輯器,并且都提供了許多強(qiáng)大的功能,下面我們就來(lái)介紹一下二者的具體使用,感興趣的小伙伴可以了解一下
    2023-11-11

最新評(píng)論

清镇市| 盐山县| 远安县| 和田县| 关岭| 新龙县| 宁南县| 许昌县| 常熟市| 扎鲁特旗| 柳林县| 丹寨县| 柏乡县| 盐津县| 敦化市| 无棣县| 阳西县| 民乐县| 嘉定区| 沈丘县| 岫岩| 监利县| 洛浦县| 怀柔区| 屏南县| 宁远县| 穆棱市| 调兵山市| 天台县| 绵竹市| 巨野县| 清河县| 兴仁县| 龙岩市| 锦州市| 凤翔县| 晴隆县| 沂源县| 正蓝旗| 德昌县| 静乐县|