最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • vue项目迁移uniapp之实现vue的vant组件toast跟uniapp的兼容

    正文概述 掘金(自由翱翔的猪)   2021-02-05   1197

    前言说:这里说下我们项目迁移的目的,看看跟阅读本文章的小伙伴们是否有共同的需求-本项目原来只是纯h5的,是运行在浏览器端的移动版本,因为个别需求需要打包成为app,但是因为一部分技术的限制,目前只有uniappSDK,所以项目要从原来的vue项目转换为uniapp项目,但是项目中使用了vant组件的toast提示,以及大量的window.localStorage. 第一呢,为了不过于依赖vant 我们想用uniapp的的showToast.第二方面是我们开发的时候依赖于浏览器,但是打包测试的时候依赖于uniapp 所以想用uniapp自身的提示。不依赖于框架。但是不想修改太多。所以做了兼容。下面会对实现做一一讲解。 注:关于实现两端的localStroage也会在下篇讲解。

    1. 首先说下在哪里使用我们写的东西。

    vue项目迁移uniapp之实现vue的vant组件toast跟uniapp的兼容

    上面的图片中代码的【Vue.use(tipsMixin);】其实就是我们用的地方。这时候可能会有人很多人疑问??为啥用Vue.use呢,其实我们就是想把自己写的内容挂载到vue内部。但是又不依赖vue的版本。可能很多人对use也不是很了解,这个时候可能就需要大家阅读下vue2的源码了。如果大家有需求可以评论下, 我也会在后续的文章中给大家输出下。接下来说下我是怎么写的。

    2. 通过use是如何把toast挂载到vue上的。

    vue项目迁移uniapp之实现vue的vant组件toast跟uniapp的兼容vue项目迁移uniapp之实现vue的vant组件toast跟uniapp的兼容

    大家可以看下上面的代码,其实在vue.use被调用的时候,通过install方法会给我们传递一个Vue的函数(instance)。我们就可以在函数的prototype上挂载方法了。但是我们为什么用Object.defineProperty呢。为啥不直接赋值呢。其实我们的目的很简单就是希望使用者只能获取值,但是不能对我们的toast进行重新赋值。所以代码中会有这么一段话【Object.defineProperty(instance.prototype,toast进行重新赋值。所以代码中会有这么一段话【Object.defineProperty(instance.prototype, 'toast进行重新赋值。所以代码中会有这么一段话【Object.defineProperty(instance.prototype,′toast')】我们就是为了原型上挂载一个属性$toast这个属性其实返回一个方法。

    3. 是如何实现中间层转换的

    通过上图我们可以看到其实我们返回的是toastContext上下文方法。这个方法其实是个执行函数。执行函数的返回的是returnFun. 我们在最后使用的时候就是使用的returnFun. 在这里我们先说下我们有几种toast:

    • a. this.$toast();
    • b. this.$toast.fail();
    • c. this.$toast.success();
    • d. this.$toast.loading()

    在上面的代码中我们会有【const resultFun = (message) => {}】。其实我们就是预先定义一个方法。注:这个方法就是我们的使用例:this.$toast()。通过foreach 循环数组['success', 'fail'] ,给方法【returnFun】添加了两个属性success, fail 而这两个属性最后指向的是一个方法。注:这这两个属性就是我们的this.$toast.success(). this.$toast.fail()方法了 通过上图中我们还单独添加一个loading方法 但是唯一不同的是我们返回一个clear方法。目的就是为了清除加载中状态。 其实仔细的同学都会发现我们所有的封装最后都指向了一个classifyFun方法。意味着我们所有的处理都来自一个地方。我们可以在这里处理我们需要的。相信大家能看的明白。 如果大家对我的讲解还不明白。可以留言。看见必回。


    下载网 » vue项目迁移uniapp之实现vue的vant组件toast跟uniapp的兼容

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元