vue2 共用组件封装?

发布于 2022-09-04 12:45:45 字数 2886 浏览 22 评论 0

目前情况:
我想调用客户端接口,但客户端只提供了一个cordova.plugins.js;里面封装了很多全局的接口函数。

//页面html引用cordova.plugins.js
document.addEventListener && document.addEventListener("pluginready", function () {
    UP.W.TOOL.getPosition(
        function (data) {
            if (data.latitude > 0 && data.longitude > 0) {
                //新增时间戳
                data.timestamp = (new Date()).getTime();
                params.callback(data);
            } else {
                params.callback(data);
            }
        },
        function (err) {
            console.log(err);
            // _this.errorCallback(params.callback, err, JSON.stringify(err));
        }
    );
});

问题是:
1、每次调用都要监听有点麻烦。
2、UP.W.TOOL[func]函数参数不定。
3、我目前通过vueJs开发。

下面是我的实现(不知道合理不):

/**
 * Created by xiaogang on 2017/2/14.
 */
"use strict";
require('./cordova.plugins.js');

let _cordovaComplete = false;

/**
 * cordova加载完成事件捕获
 */
if (document.addEventListener) {
    document.addEventListener("pluginready", function () {
        UP.W.Cordova.isInsideWalletApp && (_cordovaComplete = true);
        alert('cordovaComplete => ' + _cordovaComplete);
    });
}
/**
 *
 * @param fn 函数名称
 * @param params 函数参数
 * @private
 */
function _pluginReady(fn, params) {
    if (_cordovaComplete) {
        _plugins[fn](params);
    } else {
        document.addEventListener && document.addEventListener("pluginready", function () {
            UP.W.Cordova.isInsideWalletApp && (_cordovaComplete = true);
            _plugins[fn](params);
        });
    }
}
let _plugins = {
    init(){
        console.log('plugins init');
        alert(_cordovaComplete);
    },
    /**
     * 通过 省市名 获取对应的 code
     * @param callback:function(data){}
     */
    getPosition  (params) {
        UP.W.TOOL.getPosition(
            function (data) {
                if (data.latitude > 0 && data.longitude > 0) {
                    //新增时间戳
                    data.timestamp = (new Date()).getTime();
                    params.callback(data);
                } else {
                    params.callback(data);
                }
            },
            function (err) {
                console.log(err);
                // _this.errorCallback(params.callback, err, JSON.stringify(err));
            }
        );
    }
}

export default function (fn, params) {
    _pluginReady(fn, params);
}

然后具体的.vue文件 通过 import plugins from '../modules/plugins/plugins.js'; 导入

plugins('getPosition', {
    callback: function (data) {
        alert(JSON.stringify(data));
    }
})

问题:
1、页面通过vue-router懒加载实现。导致每个页面chunk.js都会含有cordova.plugins.js和自行封装的plugins.js的代码。

求更好的思路和解决方案。谢谢!

(cordova.plugins.js应该可以单独打一个chunk文件)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一个人的旅程 2022-09-11 12:45:45

自己把 cordova.plugin.js 和 plugin.js 写成一个 npm 包,安装到 node_modules 目录下,用 webpack 打包时使用 CommonsChunkPlugin 把 node_modules 里的依赖打成一个包

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文