微信小程序的模版与配置,包括五个内容
1.使用WXML模版语法~渲染页面结构
2.使用WXSS模版样式~美化页面结构
3.使用app.json进行全局配置
4.使用page.json进行页面配置
5.发起网络数据请求
这次详细介绍:1.使用WXML模版语法~渲染页面结构
关键点1:数据绑定 = 在data中定义数据(在页面对应的.js文件中,把数据定义到data对象中) + 在wxml页面结构中使用数据(使用双大括号把数据括起来,即小程序的Mustache语法,可以把数据渲染到页面)
Mustache语法主要用于绑定内容、绑定属性和运算。
关键点2:事件包括1.手指轻触click的tap事件(通过bindtap)、2.文本框输入的input事件(通过bindinput)、3.状态改变时触发的change事件(通过bindchange)
每个事件event包含七个属性,分别是1.事件类型type属性、2.页面打开至触发事件的毫秒数timeStamp属性、3.事件组件对应的属性值target属性、4.当前组件属性值currentTarget属性、5.额外的信息detail属性、6.事件触发时触摸点信息的数组touches属性、7.事件触发时变化的触摸点信息的数组changedTouches属性,通过event.属性使用。
小知识点:
页面组成部分
pages文件夹展开,包括两个文件夹,分别是index文件夹首页文件 和logs文件夹日志文件。其中,每个页面均由4个基本文件组成:
.js文件 页面的脚本文件,页面逻辑,存放页面的数据、事件处理函数等
.json 配置窗口的外观表现等,是 当前页面的配置文件
.wxml 当前页面的模版结构文件
.wxss 当前页面的样式表文件
ez-wxlite是一套小程序开发模板,旨在设计一套简洁、高效、可维护的开发框架。
本套模板总体上分为两部分:
client:小程序源码部分;server:为本地服务,不是后端服务,主要作用是mock接口以及静态文件服务。点击这里下载模板:
clientclient部分是框架的核心,设计上分为:
req:网络请求;router:路由;config:配置信息;utils:工具集,用于存放一些通用的公共方法。wxs:工具集,wxml相关的一些公共变量及方法。使用框架核心代码都包含在client/framework文件夹内,在app.js中一次性引入:
// app.jsrequire('./framework/index.js').patch();App({});
调用patch方法会直接完成App、Page、Component这三个全局方法的代理,并完成相应的注入,所以上面的App({})其实已经是被代理之后的App,在这一实例中我们可以获取到注入的options数据,通过this.$opts获取到:
App({ onLaunch() { console.log(this.$opts); }, onShow() { console.log(this.$opts); },});
原小程序的App方法只能在onLaunch中获取到options,代理过后的App,通过将options挂载在实例上,我们可以在所有生命周期里访问到,方便使用,Page同理。
reqreq是wx.request的高级封装,用于发起ajax请求以及文件上传。
wx.request是一个底层api,使用的不便之处在于:
返回结果比较底层,需要处理statusCode,而开发者往往更关注业务相关的data部分;登录机制繁琐,设计上甚至有些反人类;不具备良好的接口管理功能,可维护性差;……
综上所述,wx.request需要一层高级的封装来简化操作,因此有了req,req代理了wx.request,并在这基础上做了一些设计工作,以提供良好的维护性:
promisify:支持promise,替代callback的方式;简化respone:简化返回的数据信息,只保留业务数据;method替代url:使用js api的书写方式来替代直接书写url的方式;接口缓存:支持便捷的接口前端缓存;自动登录:登录态过期自动重新登录,过程对开发者透明。详细内容请浏览:
router页面的跳转存在哪些问题呢?
与接口的调用一样面临url的管理问题;参数类型单一,只支持string。当我们传递的参数argument不是string,而是number或者boolean时,也只能在下个页面得到一个argument.toString()值:
// pages/index/index.jswx.navigateTo({ url: '/pages/a/index?a=true',});// pages/a/index.jsPage({ onLoad(options) { console.log(options.a); // => "true" console.log(typeof options.a); // => "string" console.log(options.a === true); // => false },});
上面这种情况想必很多人都遇到过,而且感到很抓狂,本来就想传递一个boolean,结果不管传什么都会变成string。
我们的解决方案是:利用JSON.stringify+encodeURIComponent和decodeURIComponent+JSON.parse的方式让参数保真。
顺手也替换掉那不好记的navigate api,于是就出现了如下方式:
// pages/pageA/index.jsconst { router } = require('../../framework/index.js');Page({ onReady() { router.push({ name: 'home', }); },});// pages/index/index.jsPage({ onLoad() { console.log(this.$opts); // { id: '123', type: 1 } },});
详细内容请浏览:
serverserver为本地服务,不是后端服务,主要作用是:
mock服务:当后端接口未就绪时,使用自定义的数据模拟接口调用;静态文件服务:开发阶段使用本地静态资源替代线上的cdn资源;运行命令行进入server目录,执行npm包安装:npm install(或者使用yarn);执行npm run dev。done!
mock服务mock的配置文件为server/mock/init.js,假设我需要一个获取我的用户信息的接口:
function init(server) { server.get('/user/myInfo', (req, res) => { res.json({ code: 0, data: { id: '123456', name: 'Jack' }, msg: 'succ', }); });}
接着我就可以通过访问:8080/user/myInfo得到我预设的json。
静态文件服务如果我们想要随意地切换静态资源服务环境,那么我们在使用静态资源的时候就不能hard code,那我们怎么做呢?我们使用wxs来配置静态资源的前缀。
client/wxs这一目录存放的是wxs文件,其中我们预定义了cdnPathTable.wxs,它的含义类似于client/config.apiUrlTable.js,我们定义了local、dev、release三个环境,然后在wxml文件中使用:
<!-- pages/index/index.wxml --><wxs src="../../wxs/index.wxs" modal="utils"></wxs><image src="{{utils.cdnPath}}/img/avt.jpg" />
这里的wxs和config其实没有什么区别,选择定义在wxs中是因为wxs在wxml中使用十分方便。
其他为了使开发工作更简单高效,我们没有采用在小程序开发工具以外再搭建一层脚手架的做法,而是尽可能使用现有的工具和环境,借助于强大的vscode,我们还提供了:
eslint支持;借助typescript进行语法提示;...
启用eslint功能只需要在根目录下运行npm install即可,typescript主要是实现小程序api的语法提示功能,当然这功能直接使用现有的vscode插件就可以实现,不过我目前没有找到比较好用的~考虑到微信的api文档更新比较频繁,插件的维护速度可能跟不上,所以简单地实现了一个本地化,在开发过程中可以手动补充,将自己常用的api定义好就足以提高效率了。
近年来,小程序火的一塌糊涂,微信、百度、支付宝和头条都开始了小程序之旅,以后估计也是趋势,这里搜集了一些关于小程序源码的资源共享给大家,声明本文非原创,只是觉得有用,所以发出来给有需要的学习小程序开发的朋友看。
微信小程序官方Demo(Hao-Wu/WeApp-Demo)微信小应用示例代码(phodal/weapp-quick)微信小应用地图定位demo(giscafer/wechat-weapp-mapdemo)微信小应用- 掘金主页信息流(hilongjw/weapp-gold)微信小程序(应用号)示例:微信小程序豆瓣电影(zce/weapp-demo)微信小程序-豆瓣电影(hingsir/weapp-douban-film)小程序 hello world 尝鲜(kunkun12/weapp)微信小程序版2048小游戏(natee/wxapp-2048)微信小程序-微票(wangmingjob/weapp-weipiao)微信小程序购物车DEMO(SeptemberMaples/wechat-weapp-demo)微信小程序V2EX(jectychen/wechat-v2ex)微信小程序-知乎日报(myronliu347/wechat-app-zhihudaily)微信小程序-公众号热门文章信息流(hijiangtao/weapp-newsapp)微信小程序版Gank客户端(lypeer/wechat-weapp-gank)微信小程序集成Redux实现的Todo list(charleyw/wechat-weapp-redux-todos)微信小程序集成 LeanCloud 实现的 Todo list(leancloud/leantodo-weapp)微信小程序-番茄时钟(kraaas/timer)微信小程序项目汇总微信小程序版聊天室(ericzyh/wechat-chat)微信小程序-HiApp(BelinChung/wxapp-hiapp)小程序Redux绑定库(charleyw/wechat-weapp-redux)微信小程序版微信(18380435477/WeApp)小程序开发从布局开始(hardog/wechat-app-flexlayout)微信小程序-音乐播放器(eyasliu/wechat-app-music)微信小程序-简易计算器-适合入门(dunizb/wxapp-sCalc)微信小程序-github(zhengxiaowai/weapp-github)微信小程序-小熊の日记(harveyqing/BearDiary)微信小程序(Seahub/PigRaising)微信小程序(WeChatMeiZhi妹子图)微信小程序快速开发骨架微信小程序 - Artand 最专业的艺术设计平台微信小程序 - 开心一刻(zhijieeeeee/wechat-app-joke)微信小程序 - GitHubFeed(uniquexiaobai/wechat-app-githubfeed)微信小程序 - 国外摄影社区500px(fluency03/weapp-500px)微信小程序 - 巴爷供销社-电商平台(bayetech)基于微信小程序的UI库(Wa-UI)微信小程序-豆瓣美女/妹子图(weapp-girls)微信小程序-美女模特(BeautifulGirl)微信小程序 - 知乎仿写(RebeccaHanjw/weapp-wechat-zhihu)微信小程序 - 面包旅行(romoo/weapp-demo-breadtrip)微信小程序-淘票票(weapp-film)微信小程序-仿ONE(ahonn/weapp-one)微信小程序-新闻阅读器(vace/wechatapp-news-reader)微信小程序 - 百思不得姐(Symous/WechatApp-BaisiSister)微信小程序 - We重邮(lanshan-studio/wecqupt)微信小程序 - IOS计算器微信小程序 - github简历(monkindey/wx-github)微信小程序-程序员老黄历(xujinyang/CoderCalendar-WeApp)微信小程序 - TODOS(任务清单)(zce/weapp-todos)微信小程序 - 企业宣传小程序(yaoshanliang/weapp-ssha)