微信小程序小笔记
来源:互联网 发布:淘宝网严重违规节点 编辑:程序博客网 时间:2024/04/30 16:32
转载请注明出处:http://blog.csdn.net/anyfive/article/details/60757655
前言
前段时间研究了一下小程序,顺利把公司项目完整地搬到了小程序上面。在这里,分享一下心得。
其实小程序开发起来还算是比较简单,只要熟悉css和js,便基本不会有什么问题。
关于模块化
在我们开发app时,经常会把某个功能或者控件模块化,比如列表item、下拉刷新上拉加载、页面为空时的提示等等,在小程序中,也可以进行高度的模块化。
我们直接来看下例子吧,比如你现在要写一个用户的item:
1、在templates目录(其他目录也可以)创建item_user目录,在item_user目录中创建逻辑文件item_user.js、布局文件item_user.wxml、样式文件item_user.wxss;
2、在布局文件item_user.wxml中,暴露出模块的接口:
<template name="item_user"> <!--你的布局--></template>
3、在逻辑文件item_user.js,中,整合用户item的数据和事件,并将其绑定到对应的页面中:
function userItemClick(e) { //用户item的点击事件}//用户item的数据var userItemDatas = { datas: [], total: 0}//用户item的事件集合var userItemEvent = { userItemClick: userItemClick}//构造函数function UserItem(userDatas) { //获得当前页面 var pages = getCurrentPages() var curPage = pages[pages.length-1] //填充数据 userItemDatas.datas = userDatas //将数据设置到页面中 curPage.setData({ userDatas: userItemDatas }) //将事件设置到页面中 Object.assign(curPage,userItemsEvent)}//暴露构造函数module.exports.UserItem = UserItem
Object.assign(curPage,userItemsEvent)这句代码,是把userItemEvent的成员变量(函数),注入到curPage对象(其实是函数)中,在调试时,你会发现curPage中多了userItemClick函数
4、在对应页面中引用该模板:
userList.wxml:
<!--其他布局--><!--引入模板--><import src="../../templates/item_user/item_user.wxml"/><template is="item_user" data="{{...userDatas}}"/><!--其他布局-->
userList.wxss:
/*引入item_user的样式表*/@import "../../templates/item_user/item_user.wxss";/*其他样式*/
userList.js:
//导入item_user模板import { UserItem } from '../../templates/item_user/item_user.js'Page({ UserItem, data: { userDatas: [] }, onLoad: function (options) { //初始化UserItem new this.UserItem(userDatas) }})
无非就是在样式表中引入item_user的样式表、在布局文件中引入布局模板、在逻辑文件中初始化
这里是将userDatas的成员变量传入模板,这样你在item_user.wxml中,便可以直接使用userDatas的成员变量,比如:
用户总数为:{{total}};
当然,你也可以将userDatas整个传入,这样:
在item_user.wxml中:
用户总数为:{{userDatas.total}};
类似于EventBus的全局事件类
为了保证各个页面的状态统一,我们通常会使用EventBus(android)、NSNotificationCenter(IOS)等来经常全部的事件监听和通知,我本打算自己写个工具,利用数组实现监听队列,后来发现已经有人实现了:WxNotificationCenter,原理比较简单,我们在这里就简单地说一下:
//把监听器selector,绑定到事件name上,放入事件监听数组__notices中,observer是当前页面curPage,用于解绑function addNotification(name, selector, observer) { //省略源码}//为了防止重复添加监听,先遍历__notices,若已存在该监听器,便不再添加,否则添加function addOnceNotification(name, selector, observer) { //省略源码}//通过name和observer(即页面),从__notices中移除function removeNotification(name,observer) { //省略源码}//遍历__notices,通知各监听器,其实就是调用每个selector函数function postNotificationName(name, info) { //省略源码}
微信小程序最多打开5个页面的限制
小程序为了保证小而美,只允许页面栈中最多包含5个页面,也就是说,如果我们打开了5个页面,再想打开第6个,就不会有任何反应,对于这个问题,我选择的解决方法是:
- 尽量集合简单或界面相识的页面,保证最多5个页面;
- 对于路由问题,通过给每个页面设置TAG,每次打开页面时,判断该页面是否打开过,如打开过,直接回退到该页面,并刷新该页面数据(或直接重定向);
其实这样效果并不是很好,比如用户页面路由是A-B-C-D,这时候打开B,就变成了A-B,按返回键,直接回到了A页面;最好的方式,还是为小程序专门更改设计,去除多余的不重要的页面,更改有可能产出长路由的地方
最后分享一个rpx和px互转的函数
虽然是很简单的函数,但当你需要设置ScrollView的高度、需要做动画时,你会发现它很实用
// rpx转pxfunction rpx2px(rpxValue, windowWidth) { return (rpxValue * windowWidth) / 750}module.exports.rpx2px = rpx2px// px转rpxfunction px2rpx(pxValue, windowWidth) { return (pxValue * 750) / windowWidth}module.exports.px2rpx = px2rpx
后记
经过两个月的时间,小程序也开始不断被大众和媒体淡忘。其实我感觉微信的小程序,的确是非常适合线下场景,比如点菜、查公交等等,但是对一个公司来说,没有红利,带不来流量,我为什么要开发这么个东西?而对于线下实体店来说,有多少是能投入成本去开发的?同时,目前小程序的流畅度和使用的舒适程度,和app相比还是有一段差距的。
- 微信小程序小笔记
- 笔记:QT小程序
- 小程序笔记
- 小程序学习笔记
- 笔记-程序调试小笔记
- 微信小程序学习笔记(二)- 小程序中的canvas
- 2、微信小程序笔记---创建第一个小程序
- 小程序自学笔记(零基础学小程序汇总)---史上最全的微信小程序学习笔记,笔记看我你也就学会小程序了
- 新手笔记,小程序一
- android小程序整理笔记
- 复制字符串小程序笔记
- 小程序2017.11.29笔记
- 微信小程序学习笔记2——一些小程序列表
- JAVA笔记 关于IP的小程序
- VC++6.0 调试程序学习小笔记
- 【C++ 学习笔记小程序01】 输入输出
- 程序猿的C++小笔记
- 笔记10:时时屏幕抓取小程序
- 如何利用Spring Cloud构建起自我修复型分布式系统
- BZOJ2190 SDOI2008 仪仗队
- linux添加开机自启动脚本示例详解
- 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)
- Buffer Cache 原理
- 微信小程序小笔记
- 浅谈架构之路:前后端分离模式
- Boost库的progress_timer和progress_display讲解
- Android Studio导入github项目
- C++ 学习笔记之 STL 队列
- Java NIO (三)-分散(Scatter)/聚集(Gather)
- 可加密解密的MD5算法
- oracle三大类型(varchar2,number,date)转换
- 钻取报表学习总结