vue调用原生方法交互

2023-11-15

目前在做一个H5应用;需要调用原生方法进行交互;特此做一个记录。

技术栈 : vue版本2.6 vant版本 2.12

第一步:声明一个rpcFn.js文件 进行原生交互阿里桥封装

const rpc = function (url, params) {
  return new Promise((res, ref) => {
    try {
      // 呼起 JSBridge阿里桥', url:路径; params:参数;
      window.AlipayJSBridge.call(url, {
        ...params
      }, (result) => {
        let code = result.code * 1;
        // result:回调数据源;
        // 判断状态 是否 200
        if (result && code === 200) {
          res(result);
        } else {
          // 这里可以统一做一些 提示操作
          ref(result);
        }
      });
    } catch (e) {
      ref(e, '设备不支持');
    }
  });
};
export default rpc;

第二步:声明rpc.js 引入 封装的 rpcFn 原生方法; 进行公共封装

import rpcFn from './rpcFn.js';
// 引入整个vue 实例
import Vue from 'vue';
const newVue = new Vue();
// 这里做一个数据 遍历 需要增加原生方法的话直接在rpcList增加
const rpcList = [
  // 百度定位
  'baiduPositioning',
  // 人脸识别认证
  'peopleFace',
  // 拍照
  'gotoCamera',
  ...
];
const rpcListLength = rpcList.length;
const rpcFuncObj = {};
for (let i = 0; i < rpcListLength; i++) {
  const rpcName = rpcList[i];
  //firstLetterToUpperCase 方法 将 rpcList 每一项的首字母转大写 peopleFace => PeopleFace
  const rpcFuncName = `rpc${newVue.firstLetterToUpperCase(rpcName)}`;
  rpcFuncObj[rpcFuncName] = function (params) {
    return rpcFn(rpcName, params);
  };
  // rpcName:每一项原生方法; rpcFuncName:挂载在vue实例上完整的原生方法;params:原生方法的参数; peopleFace => rpcPeopleFace
}
// 方法导出
export default {
  ...rpcFuncObj
};

第三步:在 main.js 引入,挂载在vue 实例上

import rpc from 'rpc.js';
// 遍历挂载在 vue实例上
Object.keys(rpc).forEach(rpcName => {
  Vue.prototype[rpcName] = rpc[rpcName];
});

第四步:在页面中调用原生方法

<!--页面按钮执行事件-->
<Button @click="handleClick()">按钮</Button>

// 按钮执行 原生定位事件
handleClick() {
  // 这里 我们可以打印 this ; ps: this指向整个 vue实例
  console.log(this,'vue实例');
  this.rpcBaiduPositioning().then((res) => {
    //获取原生定位数据
    console.log(res, "原生定位地址数据在这里");
  }).catch(rej => {
    Toast.fail(rej.message);
  });
};

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue调用原生方法交互 的相关文章

随机推荐

  • NeuralEnhance: 提高图像分辨率的深度学习模型

    NeuralEnhance是使用深度学习训练的提高图像分辨率的模型 使用Python开发 项目地址 https github com alexjc neural enhance 貌似很多电影都有这样的情节 对看不清的低分辨率图像 车牌 面部
  • lattice diamond软件使用

    1 diamond软件破解 lisence坚果云下载 或者这个博主操作 环境变量设置 2 调用IP 有两种方式 依据芯片或者软件版本改变 传统的IPexpress 每个IP单独例化 新出的Clarity 多个IP在同一个顶层内调用 再将这个
  • [1148]python3.6使用ansible报Python 3.6 is no longer supported错

    ansible version usr local lib python3 6 site packages ansible parsing vault init py 44 CryptographyDeprecationWarning Py
  • Java中判断List集合中是否有重复元素的方法

    package cn tedu test import java util ArrayList import java util HashSet import java util List public class TestList pub
  • 移动适配的另一种方式—— vw / vh

    前言 哦吼 之前我们对移动适配的其中一种方式 rem 进行了学习 当时在学习的时候我们有提到过另一种的适配方式 那么今天 我们就一起来对移动适配的另一种方式 vw vh 进行学习 我们在学习了rem后 知道他是相对单位 而且是相对于根元素H
  • 关于无法卸载和安装VISIO2010的问题

    之前装个Visio2010突然就打不开了 并且最可恨的是 每次打开word编辑转化搜狗输入法就会提示什么安装错误程序停止工作问是否继续 虽然点击确定后不影响word的使用 但每次都这样就很闹心了 试了用软件助手强力卸载不行 采用window
  • 用豪斯霍尔德(Householder)变换进行矩阵的QR分解,及其Matlab和OpenCV实现

    1 豪斯霍尔德变换 一般地 对给定的 m m m维向量 a a a 考虑分块 a
  • 【目标检测】基于yolov5海上船舶目标检测(附代码和数据集)

    Hello 大家好 我是augustqi 今天给大家分享的目标检测项目是 基于yolov5海上船舶目标检测 附代码和数据集 Part1 前言 传统的海上目标检测是通过雷达来实现 但是随着技术的发展 各种隐形涂料的船舰层出不穷 通过雷达进行目
  • Java中的线程中断

    Java中的线程中断 1 线程中断相关方法介绍 Java多线程编程中的interrupt 方法 isInterrupted 方法和interrupted 方法都是跟线程中断相关的方法 都非常重要 这三个方法名称非常相似 不理解原理时容易混淆
  • 秋招笔试题——嵌入式软件开发

    某VO 给定一个非空字符串str 在最多可以删除一个字符的情况下 请编程判定其能否成为回文字符串 如果可以则输出首次删除一个字符所能得到的回文字符串 如果不行则输出字符串 false bool isSpecial char string i
  • C++ 类与对象 面向对象编程 继承

    https www bilibili com video BV1et411b73Z p 127https www bilibili com video BV1et411b73Z p 127 继承是面向对象三大特性之一 我们发现 定义一些类时
  • WordPress计数插件

    这几天在折腾这个blog 无非是加些插件改点代码 折腾的成果基本就是大家看到的这样了 可能国外用户不关心post的访问人数 WP基本功能里没有显示多少个views的功能 这时候就需要WP PostViews插件帮忙 我的WP版本比较高 安装
  • java中的异常 最详细的讲解

    一 异常的概念 异常 在程序执行的过程中 出现的非正常情况 最终会导致JVM非正常停止 在Java等面向对象的编程语言中 异常本身是一个类 产生异常就是创建异常对象并抛出了一个异常对象 Java处 理异常的方式是中断处理 异常指的并不是语法
  • Nginx基本入门

    本文转载至 http blog csdn net u012486840 article details 53098890 1 静态HTTP服务器 首先 Nginx是一个HTTP服务器 可以将服务器上的静态文件 如HTML 图片 通过HTTP
  • [leetcode] 适合打劫银行的日子 -前缀和

    题目链接 前缀和思想 用数组 l l l 表示前面有多少个数满足 a i
  • MySQL----内置函数

    MySQL gt 内置函数 函数 将经常使用的代码封装起来 需要的时候直接调用就可以 从函数定义角度 函数可分为 内置函数 系统内置的通用函数 自定义函数 需要根据需求编写的函数 MySQL提供的内置函数从实现的功能角度可以分为数值函数 字
  • 多益视频面试

    多益面试 有一种怀疑人生的感觉 向老师 我对不起你 去年刚学的网络安全 我竟然没说出来加密算法的名字 也并不是题很难 而是简单的就是说不出来 写不出来 而难的也就是听过而已 问题 1 说一下什么是线程安全 线程安全的场景 线程安全就是确保程
  • 单相机做分屏混合

    做了一个单相机实现分屏混合的功能 需求大概就是在同一视角下 相机通过不同的CullingMask获取不同的渲染图片RenderTexture之后 通过某种方式一起显示在界面的功能 其实核心逻辑就是怎样用一个相机渲染不同的图片罢了 直接上代码
  • 在Java中,将ExecutorService转为守护程序

    问题描述 我正在Java 1 6中使用一个ExecutoreService 简单地开始 ExecutorService pool Executors newFixedThreadPool THREADS 当我的主线程完成 以及由线程池处理的
  • vue调用原生方法交互

    目前在做一个H5应用 需要调用原生方法进行交互 特此做一个记录 技术栈 vue版本2 6 vant版本 2 12 第一步 声明一个rpcFn js文件 进行原生交互阿里桥封装 const rpc function url params re