经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » 微信小程序 » 查看文章
微信小程序wepy框架学习和使用心得详解
来源:jb51  时间:2019/5/24 11:37:18  对本文有异议

一、微信小程序wepy框架简介:

微信小程序WePY框架是腾讯官方推出来的框架,类似的框架还有美团的mpvue,京东的Taro等; 目前公司开发小程序主要用到的是微信原生方法和官方的wepy框架; wepy框架在开发过程中参考了 Vue 等现有框架的一些语法风格和功能特性,对原生小程序的开发模式进行了再次封装,更贴近于 MVVM 架构模式, 并支持ES6/7的一些新特性。相对更容易上手,提高开发效率;

二、WePY项目的创建与目录结构

WePY的安装或更新都通过npm进行,全局安装或更新WePY命令行工具

  1. npm install wepy-cli -g

在开发目录中生成Demo开发项目

  1. wepy new myproject

切换至项目目录

  1. cd myproject

安装依赖

  1. npm install

开启实时编译

  1. wepy build --watch

WePY项目的目录结构如下

  1. ├── dist 小程序运行代码目录(该目录由WePYbuild指令自动编译生成,请不要直接修改该目录下的文件)
  2. ├── node_modules
  3. ├── src 代码编写的目录(该目录为使用WePY后的开发目录)
  4. | ├── components WePY组件目录(组件不属于完整页面,仅供完整页面或其他组件引用)
  5. | | ├── com_a.wpy 可复用的WePY组件a
  6. | | └── com_b.wpy 可复用的WePY组件b
  7. | ├── pages WePY页面目录(属于完整页面)
  8. | | ├── index.wpy index页面(经build后,会在dist目录下的pages目录生成index.jsindex.jsonindex.wxmlindex.wxss文件)
  9. | | └── other.wpy other页面(经build后,会在dist目录下的pages目录生成other.jsother.jsonother.wxmlother.wxss文件)
  10. | └── app.wpy 小程序配置项(全局数据、样式、声明钩子等;经build后,会在dist目录下生成app.jsapp.jsonapp.wxss文件)
  11. ── package.json 项目的package配置

搭建好项目后,IDE需配置代码高亮,文件后缀为.wpy,可共用Vue的高亮规则,但需要手动设置,具体配置大家可参考wepy官方文档

三、wepy使用心得总结:

1.wepy代码风格类似Vue,如computed,data,methods等用法差不多,熟悉vue开发的同学看看文档可以轻松上手,不过还是有很多地方写法容易混淆,我工作中遇到的总结几个,如列表循环,条件渲染,父子组件值传递等,下面举例说明:

1). wepy和vue列表循环对比:

  1. // wepy 列表循环,外面可套一层repeat标签,注意和vue写法的区别
  2. <repeat for="{{list}}" key="index>
  3. <view>{{item}}</view>
  4. </repeat>
  5. // vue 列表循环,外面可套一层template标签
  6. <template v-for="(item,index) in list" :key="index"> // 不推荐key直接用索引index
  7. <div>{{item}}<div>
  8. </template>

2). wepy和vue条件渲染中,wepy需要加{{}},vue不需要,里面都可以写表达式进行判断:

  1. <view wx:if="{{show}}"></view>
  2. <div v-if="show"></div>

3). 父子组件值传递两者都在子组件中用props接收, props中可以定义能接收的数据类型,如果不符合会报错,wepy可以通过使用.sync修饰符来达到父组件数据绑定至子组件的效果,也可以通过设置子组件props的twoWay:true来达到子组件数据绑定至父组件的效果。那如果既使用.sync修饰符,同时子组件props中添加的twoWay: true时,就可以实现数据的双向绑定了;

  1. // parent.wpy
  2. <child :title="parentTitle" :syncTitle.sync="parentTitle" :twoWayTitle="parentTitle"></child>
  3. data = {
  4. parentTitle: 'p-title'
  5. };
  6. // child.wpy
  7. props = {
  8. // 静态传值
  9. title: String,
  10. // 父向子单向动态传值
  11. syncTitle: {
  12. type: String,
  13. default: 'null'
  14. },
  15. twoWayTitle: {
  16. type: String,
  17. default: 'nothing',
  18. twoWay: true
  19. }
  20. };
  21. onLoad () {
  22. console.log(this.title); // p-title
  23. console.log(this.syncTitle); // p-title
  24. console.log(this.twoWayTitle); // p-title
  25. this.title = 'c-title';
  26. console.log(this.$parent.parentTitle); // p-title.
  27. this.twoWayTitle = 'two-way-title';
  28. this.$apply();
  29. console.log(this.$parent.parentTitle); // two-way-title. --- twoWay为true时,子组件props中的属性值改变时,会同时改变父组件对应的值
  30. this.$parent.parentTitle = 'p-title-changed';
  31. this.$parent.$apply();
  32. console.log(this.title); // 'c-title';
  33. console.log(this.syncTitle); // 'p-title-changed' --- 有.sync修饰符的props属性值,当在父组件中改变时,会同时改变子组件对应的值。

2.wepy支持自定义组件开发,实现组件复用,减少代码冗余,提高开发效率;

3.wepy支持引入npm包,拓展了很多方法;

4.支持Promise,ES2015+特性,如async await 等;

5.支持多种编译器,Less/Sass/Styus、Babel/Typescript、Pug;

6.支持多种插件处理,文件压缩,图片压缩,内容替换等;

7.支持 Sourcemap,ESLint代码规范管理等;

8.对小程序wx.request方法参数进行了修改,返回Promise对象,优化了事件参数传递,具体用法如下:

  1. // wx.request原生代码:
  2. wx.request({
  3. url: 'xxx',
  4. success: function (data) {
  5. console.log(data);
  6. }
  7. });
  8.  
  9. // WePY 使用方式, 需要开启 Promise 支持,参考开发规范章节
  10. wepy.request('xxxx').then((d) => console.log(d));
  11.  
  12. // async/await 的使用方式, 需要开启 Promise 和 async/await 支持,参考 WIKI
  13. async function request () {
  14. let d = await wepy.request('xxxxx');
  15. console.log(d);
  16.  
  17. // 原生的事件传参方式:
  18. <view data-id="{{index}}" data-title="wepy" data-other="otherparams" bindtap="tapName"> Click me! </view>
  19. Page({
  20. tapName: function (event) {
  21. console.log(event.currentTarget.dataset.id)// output: 1
  22. console.log(event.currentTarget.dataset.title)// output: wepy
  23. console.log(event.currentTarget.dataset.other)// output: otherparams
  24. }
  25. });
  26.  
  27. // WePY 1.1.8以后的版本,只允许传string。
  28. <view @tap="tapName({{index}}, 'wepy', 'otherparams')"> Click me! </view>
  29. methods: {
  30. tapName (id, title, other, event) {
  31. console.log(id, title, other)// output: 1, wepy, otherparams
  32. }
  33. }
  34.  
  35.  

四 、最后一点点感悟:

本文总结的比较浅显,很多地方说的也不是太详细,如有错误的地方大家可以批评指正,欢迎大家留言一起交流探讨,坚持学习,不断探索总结,路漫漫其修远兮,吾将上下而求索!

参考资料:

wepy官方文档 ;

微信小程序官网开发文档 ;

 vue官方开发文档

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号