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

vue調(diào)用原生方法交互解讀

 更新時(shí)間:2022年09月21日 16:51:27   作者:前端菜中菜  
這篇文章主要介紹了vue調(diào)用原生方法交互,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue調(diào)用原生方法交互

目前在做一個(gè)H5應(yīng)用;需要調(diào)用原生方法進(jìn)行交互;特此做一個(gè)記錄。

技術(shù)棧 : vue版本2.6 vant版本 2.12

第一步

聲明一個(gè)rpcFn.js文件 進(jìn)行原生交互阿里橋封裝

const rpc = function (url, params) {
? return new Promise((res, ref) => {
? ? try {
? ? ? // 呼起 JSBridge阿里橋', url:路徑; params:參數(shù);
? ? ? window.AlipayJSBridge.call(url, {
? ? ? ? ...params
? ? ? }, (result) => {
? ? ? ? let code = result.code * 1;
? ? ? ? // result:回調(diào)數(shù)據(jù)源;
? ? ? ? // 判斷狀態(tài) 是否 200
? ? ? ? if (result && code === 200) {
? ? ? ? ? res(result);
? ? ? ? } else {
? ? ? ? ? // 這里可以統(tǒng)一做一些 提示操作
? ? ? ? ? ref(result);
? ? ? ? }
? ? ? });
? ? } catch (e) {
? ? ? ref(e, '設(shè)備不支持');
? ? }
? });
};
export default rpc;

第二步

聲明rpc.js 引入 封裝的 rpcFn 原生方法; 進(jìn)行公共封裝

import rpcFn from './rpcFn.js';
// 引入整個(gè)vue 實(shí)例
import Vue from 'vue';
const newVue = new Vue();
// 這里做一個(gè)數(shù)據(jù) 遍歷 需要增加原生方法的話直接在rpcList增加
const rpcList = [
? // 百度定位
? 'baiduPositioning',
? // 人臉識(shí)別認(rèn)證
? 'peopleFace',
? // 拍照
? 'gotoCamera',
? ...
];
const rpcListLength = rpcList.length;
const rpcFuncObj = {};
for (let i = 0; i < rpcListLength; i++) {
? const rpcName = rpcList[i];
? //firstLetterToUpperCase 方法 將 rpcList 每一項(xiàng)的首字母轉(zhuǎn)大寫 peopleFace => PeopleFace
? const rpcFuncName = `rpc${newVue.firstLetterToUpperCase(rpcName)}`;
? rpcFuncObj[rpcFuncName] = function (params) {
? ? return rpcFn(rpcName, params);
? };
? // rpcName:每一項(xiàng)原生方法; rpcFuncName:掛載在vue實(shí)例上完整的原生方法;params:原生方法的參數(shù); peopleFace => rpcPeopleFace
}
// 方法導(dǎo)出
export default {
? ...rpcFuncObj
};

第三步

在 main.js 引入,掛載在vue 實(shí)例上

import rpc from 'rpc.js';
// 遍歷掛載在 vue實(shí)例上
Object.keys(rpc).forEach(rpcName => {
? Vue.prototype[rpcName] = rpc[rpcName];
});

第四步

在頁面中調(diào)用原生方法

<!--頁面按鈕執(zhí)行事件-->
<Button @click="handleClick()">按鈕</Button>
?
// 按鈕執(zhí)行 原生定位事件
handleClick() {
? // 這里 我們可以打印 this ; ps: this指向整個(gè) vue實(shí)例
? console.log(this,'vue實(shí)例');
? this.rpcBaiduPositioning().then((res) => {
? ? //獲取原生定位數(shù)據(jù)
? ? console.log(res, "原生定位地址數(shù)據(jù)在這里");
? }).catch(rej => {
? ? Toast.fail(rej.message);
? });
};

vue和原生native交互使用

安卓與Vue交互方式

首先Vue調(diào)用安卓這方面不用說了,使用方式和html調(diào)用安卓Native方法一致,這里就不做多說了,下面重點(diǎn)要說的是安卓調(diào)用Vue的function,這里要特別說明下,安卓端調(diào)用代碼不變,主要是Vue端實(shí)現(xiàn)。

因?yàn)榘沧颗c網(wǎng)頁之間的交互是通過window來實(shí)現(xiàn)的,但是因?yàn)閂ue的的內(nèi)部實(shí)現(xiàn)邏輯對(duì)付function方法并不是掛載到window下的,所以安卓就無法通過window調(diào)用Vue當(dāng)中的方法,然后就導(dǎo)致了不管原生怎么修改代碼最后都無法實(shí)現(xiàn)調(diào)用網(wǎng)頁端的function代碼。

知道了原因解決起來就容易了,既然是因?yàn)閂ue無法將function代碼掛載到window下,那么就手動(dòng)將function方法掛載到window上就好了,這個(gè)實(shí)現(xiàn)起來也容易,無非就是在vue的oncrete或者mount方法下面使用window.funcName = this.funcName 或者**window.funcName = function(){}**這兩種方法實(shí)現(xiàn)將function掛載到window上,這樣就可以實(shí)現(xiàn)了原生訪問網(wǎng)頁代碼的操作。 

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

最新評(píng)論

云浮市| 平潭县| 阳城县| 紫阳县| 九寨沟县| 剑河县| 蒙阴县| 万山特区| 浦县| 莎车县| 六安市| 雅安市| 托里县| 唐河县| 平乐县| 和平区| 耿马| 沂源县| 瑞昌市| 舞阳县| 罗源县| 安福县| 闵行区| 孝义市| 麦盖提县| 平果县| 清流县| 利津县| 遵化市| 鄯善县| 桑植县| 永福县| 乌拉特后旗| 革吉县| 镇坪县| 东明县| 新乐市| 巫山县| 海城市| 永德县| 蕲春县|