众所周知,微信小程序的语法和uniapp的语法接近,一个是Vue的近亲,一个完全兼容Vue,所以他们相互之间转换应该也是不难的。

微信小程序的语法,其实是vue.js语法的裁剪定制版,在数据绑定、自定义组件等很多方面都有相似之处。
以下是一个小程序源码转换步骤指南:

客户端代码转换

  1. 新建一个uni-app项目,把之前的app.js、app.wxss的代码,挪到app.vue里,分别放到script和style节点下面。
  2. 转换app.json为pages.json,把每个小程序page目录下的index.json(或页面名称对应的json)里的配置取出来,放到pages.json的style下。
  3. pages下每个页面目录放一个vue空文件模板。
  4. 把之前页面的wxss内容复制到vue文件的style中,无需改动。
  5. 把之前页面的js内容复制到vue文件的script中,然后执行如下改动
  6. 之前js里面的data,放到新的data return下。

之前

Page({data: {show1: false}
})

之后

<script>export default {data() {return {show1: false}}}
</script>
  1. 之前js里面的自定义方法,放到新的method下。
  • 之前
Page({toggleActionSheet1() {this.setData({show1: true});}
})
  • 现在
<script>export default {methods: {toggleActionSheet1() {this.show1 = true}}}
</script>
  1. 之前js里面的生命周期函数onLoad、onShow等,直接放到export default下。
  • 之前
Page({onLoad() {console.log("page load");}
})
  • 现在
<script>export default {onLoad() {console.log("page load");}}
</script>
  1. setdata的处理方式
  • 方式一:从 this.setData({loading: false,areaList: response.data.data}) 改为 this.loading = false;this.areaList = response.data.data
  • 方式二:重写setdata方法,如下
setData:function(obj){  let that = this;  let keys = [];  let val,data;  Object.keys(obj).forEach(function(key){  keys = key.split('.');  val = obj[key];  data = that.$data;  keys.forEach(function(key2,index){  if(index+1 == keys.length){  that.$set(data,key2,val);  }else{  if(!data[key2]){  that.$set(data,key2,{});  }  }  data = data[key2];  })  });
}
  1. 把之前页面的wxml内容复制到vue文件的template下的view下,然后执行如下改动
属性绑定从 attr="{{ a }}",改为 :attr="a"
title="复选框{{ item }}" 改为 :title="'复选框' + item"
事件绑定从 bind:click="toggleActionSheet1" 改为 @click="toggleActionSheet1"
阻止事件冒泡 从 catch:tap="xx" 改为 @tap.native.stop="xx"
wx:if 改为 v-if
wx:for="{{ list }}" wx:key="{{ index }}" 改为`v-for="(item,index) in list"
  1. 微信小程序自定义组件处理
    之前引入的自定义组件,需要放到wxcomponents下,并在pages.json里注册。如果这里有js,并且被其他代码引入,要注意修改引用代码的路径指向。如下:
{"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages{"path": "pages/dashboard/dashboard"},{"path": "pages/action-sheet/action-sheet","style":{"navigationBarTitleText":"ActionSheet 上拉菜单","usingComponents":{ //这里单页面引入action-sheet组件"van-action-sheet": "/wxcomponents/vant/action-sheet/index"}}}],"globalStyle": {"navigationBarTitleText": "Vant For Uni-app","usingComponents": { //这里给所有页面全局引入了如下组件"demo-block": "/wxcomponents/vant/demo-block/index","van-button": "/wxcomponents/vant/button/index","van-cell": "/wxcomponents/vant/cell/index","van-cell-group": "/wxcomponents/vant/cell-group/index","van-icon": "/wxcomponents/vant/icon/index","van-loading": "/wxcomponents/vant/loading/index","van-toast": "/wxcomponents/vant/toast/index"}}
}

辅助工具

str = str.replace(/bindtap/g, '@onclick');
str = str.replace(/wx:if/g, 'v-show');
str = str.replace(/src=\'\{\{/g, ":src='");
str = str.replace(/wx\:key=\"\*this\"/g, ' ');
str = str.replace(/wx\:key\=\"index\"/g, ' ');
str = str.replace(/wx:for="{{/g, v-for= "(item,index) in ');
str = str.replace(/bindinput/g, '@input');

wx.是否要替换为uni.?

关于js api中的wx.,不要全局替换为uni.。因为有的wx的api是微信独有的,替换为uni后,反而在微信下没法用了。

同时uni-app编译器提供了把wx.编译为不同平台的机制,所以直接使用wx.的api完全可以正常在各端运行。

所以对于老代码,替不替换不重要,不影响运行,只影响语法提示和转到定义。

但是新写的代码,还是要用uni.的api,在代码提示、转到定义方面更强大。

服务相关代码转换

登陆、支付、推送、定位、地图等服务都是联网服务,它们不止是客户端代码转换就可以直接运行的。涉及服务器接口和配置两方面的工作。

uni-app在客户端侧提供了统一的代码,比如uni.login、uni.requestPayment,在不同端均可以实现登陆、支付。

但服务器端的接口不一样,比如微信的App支付和小程序支付的申请开通、服务器接口都不一样,所以配置和服务器接口仍需单独处理。

比如把小程序转换uni-app后,需要打包发布为app,则需要向微信申请app支付的资质,拿到appkey等信息,填写到uni-app工程的 manifest-app -> sdk配置 -> 微信支付 下面,然后打包才能成效(如果是离线打包,参考离线打包的文件)。同时服务器需要按照微信的App支付的接口再开发对接。

同样微信小程序里内置的定位、地图,在app上,需要单独向高德等三方服务商申请,否则无法在app里使用这些服务。

这些sdk申请方式在 manifest -> app sdk配置 下有教程链接。

其他注意

文章来源: https://yq.aliyun.com/articles/703548

【小程序】微信小程序代码如何转uniapp代码?相关推荐

  1. 微信小程序—微信小程序端支付代码

    只有微信小程序端的代码,如下 Page({data: {},onLoad: function (options) {// 页面初始化 options为页面跳转所带来的参数var that = this ...

  2. 小程序 | 微信小程序实现商品分类列表

    小程序 | 微信小程序实现商品分类列表 一.效果展示 二.代码实现 <!-- wxml --> <view class="container"> <! ...

  3. 小程序 | 微信小程序中使用位置API打开地图

    小程序 | 微信小程序中使用位置API打开地图 一.效果展示 二.代码实现 使用微信内置地图查看位置,调用wx.openLocationAPI,具体内容可以查看微信官方文档. // js let In ...

  4. 小程序 | 微信小程序实现循环嵌套数据选择

    小程序 | 微信小程序实现循环嵌套数据选择 一.效果展示 二.代码实现 在.wxml文件中,有时从后台传来的数据可能会出现数组嵌套数组的情况,需要利用wx:for嵌套实现数据的展示.这时,外层循环正常 ...

  5. 小程序源码:修复图片音频全新升级带特效喝酒神器小游戏微信小程序

    这是一款全新升级带特效喝酒神器小游戏微信小程序源码 小编发现很多喝酒神器小程序都不带特效和音效的 感觉差了那么一点意思而且感觉也不炫酷 所以小编今天给大家带来一款带特效,音效炫酷的喝酒神器 该款神器由 ...

  6. 微信小程序----微信小程序浏览pdf文件

    微信小程序----微信小程序浏览pdf文件 说明:通过wx.downloadFile,wx.openDocumen来实现打开pdf文件.只需在js操作即可. HTTP.Config.Request(' ...

  7. 小程序源码:炫酷手持滚动弹幕生成小工具微信小程序-多玩法安装简单

    这是一款滚动弹幕生成微信小程序源码 让弹幕文字在手机屏幕上跑起来,LED弹幕 手机弹幕,告白神奇,等 支持多种模板,每一种模板都支持自定义颜色等等 字体跳动,字体表白等等 另外用户也可以支持自定义文字 ...

  8. 生鲜小程序 微信小程序怎么制作 临沂修齐网络专业制作微信小程序

    生鲜小程序 微信小程序怎么制作 临沂修齐网络专业制作微信小程序 生鲜小程序开发功能介绍: 1.产品展示:通过扫码或者搜索小程序,用户可以看到不同品种的新鲜蔬菜.水果以及肉类. 2.定时收货:买家可以预 ...

  9. 微信小程序:娱乐小工具微信小程序源码下载支持多种流量主

    这应该是属于娱乐小工具呢还是属于工具箱类型就看你们怎么分辨了 当然啦说是娱乐也可以,里面功能应该也属于娱乐性 如果说是工具类型也可以,里面也属于工具吧 该程序由几个小功能组合而成如有: 网易云音乐下载 ...

  10. 抛硬币小游戏微信小程序源码

    简介: 抛硬币小游戏微信小程序源码 日常生活中遇到选择?抛个硬币看看天意吧! 有了这个小程序,起不起床拋一下,叫不叫外卖拋一下,打不打扫房间拋一下,让生活充满乐趣~ 人生决定不了的决定就让上天来决定吧 ...

最新文章

  1. 机房收费系统系列一:运行时错误‘-2147217843(80040e4d)’;用户‘sa’登陆失败...
  2. 还在用Logback?Log4j2的异步性能已经无敌了,还不快试试
  3. Django中使用UpdateView修改数据后,返回列表页
  4. MSSQL2000+asp.net+论坛安装过程
  5. boost::rational用法的测试程序
  6. 【C++深度剖析教程19】前置操作符与后置操作符
  7. java resources 目录_[Java] 在 jar 文件中读取 resources 目录下的文件
  8. Openldap 整合windows AD认证
  9. Android 危险!
  10. CHM文件出现的常见错误及解决办法
  11. Enterprise Library 1.0
  12. 龙贝格算法(Matlab实现)
  13. Fluentd日志采集使用教程
  14. 模拟斗地主洗牌发牌,并对已发好的拍进行排序(红桃A,方块A, 黑桃2.......)
  15. 航空公司系统是怎样炼成的
  16. [PTA]6-12 判断奇偶性
  17. android wifi连接优先级,gogo平台靠谱吗-官方网站
  18. python求奇偶数和_python奇偶数求和
  19. 通达信公式:如何表示5个数据中的前三大数值?
  20. Gin框架使用Zap接收日志

热门文章

  1. Spring自动注入(引用类型)
  2. 码农即将30岁,焦虑扑面而来
  3. 第二章 数据库和表的基本操作
  4. 【计算机网络】计算机网络疑难问题理解
  5. spec服务器性能测评,SPEC CPU 2006测试运算性能_服务器评测与技术-中关村在线
  6. Python模拟财富分配实验
  7. jquery不起作用的原因
  8. svg android动画制作,SVG动画案例的学习_SVG, SVG Animation, Animation, Web动画 教程_W3cplus...
  9. NSD ADMIN DAY02
  10. python输入年月日输出_python下输出指定年月日的方法之一