前言css
已经很久没动过微信小程序了,周五的时候,有一个朋友说有一个外快,问我干不干,几个朋友一块儿搞一下,我想了一下,正好周末也没啥事,女友回家了,就答应下来了,几个朋友聚到一块儿整了两天整完了,由于自己程序要求就不是很高,很久也没写什么技术文了,就顺手也整理了一篇微信小程序经常使用的API开发技巧,想作小程序的朋友能够看一下html
微信小程序是一种不须要下载安装便可使用的全新的链接用户与服务的方式,它能够在微信内被便捷地获取和传播,同时具备“用完即走,不用关心是否安装太多应用”的使用体验。
微信小程序作成了一个开放式的平台,它让开发者能够将本身的想法作成微信小程序的服务放在平台上供人们使用。经过微信小程序的开发,应用将无处不在,随时可用。在进行开发以前,须要进行注册,绑定开发者等一系列操做。详情移步微信官方文档。
笔者观看的教学视频于2017年初拍摄,因此当时最新的开发者工具版本为0.11.122100版,现官方文档中提供的最新版本为1.02.1907112版本。
是真的不须要下载安装便可使用吗?
不是的,微信小程序的安装包小于1MB(最新版改成2MB),在用户点击使用的时候,就不到1MB的安装包,下载安装的时候,用户本人是感觉不到的。前端
前端先制造假数据,能够将假数据在页面很好的展现以后再和服务器的数据进行相应的对接。
前端驱动服务器开发的设计理念。由此目的在于设计比较合理,api较方便。程序员
前往开发工具下载地址去下载
下载完成以后,经过微信扫一扫打开开发者工具,选择新建项目
AppID选择使用测试号(由于注册小程序号比较麻烦)
其余选项设置好以后选择建立,进行建立新的小程序项目
平台会自动生成一个小程序HelloWorld的demo
此工具左边是效果区,右边是代码区。它有一个特色就是修改某些参数不须要编译就能够预览。直接Ctrl+S就能够看见修改的效果。
调试区用来打断点调试代码。点击上方菜单栏的调试工具按钮打开调试区。
在调试区的js文件:
带sm后缀的是用来打断点调试的文件,和写的代码是同样的。
不带sm后缀的是编译事后的文件,和写的代码也是同样的。只不过第一行出现了一个编译的信息。json
一、不能上传和发布小程序
二、不能真机运行,只能够在PC模拟器中运行
三、录音、网络状态、罗盘、拨打电话等功能没法使用
四、获取用户信息的流程是模拟的而不是真实的
可是,不影响咱们学习小程序开发小程序
在debug的断点状态时,快捷键和Crome是同样的。后端
注:在打开调试区的状态下点击下图标注的按钮,能够单独将调试区打开一个窗口,并将Console折叠放在窗口下方。微信小程序
和Crome的NetWork如出一辙api
用来查看小程序本地缓存数据数组
鼠标停留在右边代码上面的时候左边页面显示对应的UI元素
模拟器的上面菜单栏有按钮切换先后台,用来模拟打开别的小程序,本程序在后台运行的动做。当后台运行时在小程序里会触发一个事件。
注:如何快速打开小程序api文档–点击上面菜单的:微信开发者工具–>关于–>打开api文档
生成HelloWorld小程序以后点击它的主页面进入一个子页面能够查看启动的日志信息。
注:下图的无限多个只是理论上的。过多的页面违背小程序的设计初衷。小程序的整体的压缩文件包的体积超过1MB将不能上传(最新版本上传限制在2MB)。
无限多个
无限多个
无限多个
应用程序入口
一级页面
二级页面
三四五级页面--最多五级
每个页面由如下文件组成
wxml
wxss
json
js
小程序自生成的目录结构
在app.json中设置打开的是哪一个页面
P.S.:json文件是不能够随意加注释的。
图片大小px与rpx:
px在这里不是指图片属性的物理像素,而是Iphone6上的逻辑分辨率概念。Iphone6上物理分辨率和逻辑像素的2:1的关系。也就是说,在iphone6上面,2rpx=1px。
为了动态去适应不一样分辨率的设备,咱们用rpx(逻辑分辨率)作适应。设计图是0-750的像素,大小能够直接转化成rpx。
如何设置样式:
方式一(动态样式):在标签中加入style属性,写入当前标签样式
方式二(静态样式):写wxss文件–在标签上加入一个class属性,经过class选择器写css样式。wxss文件不须要单独去引用。由于注册的是以某名字为名名的全部文件。
例子:
wxml文件:
wxss文件:
用来将堆叠在一块儿的元素变规整,显示成列排布
colum:列排布
row:横向排布
align-items用来设置对齐版式,center表示左右居中
全局同样的样式能够提到全局的样式设置里面设置。
不能在容器中直接设置background-color的颜色。由于容器没有设置高度和宽度,它会自适应里面元素的高度和宽度。若是直接给一个高度的话,若是里面内容是一个动态内容,可能会超出规定的高度和宽度,形成内容溢出。
解决方案:
通过调试咱们发现,系统在咱们规定的view容器外面还包了一层名叫page的容器。咱们去设置page的样式
设置导航栏背景色:
在app.json中有window配置项 用于设置小程序的标题、状态栏、导航条、窗口背景色。
其中navigationBarBackgroundColor用来设置导航栏背景色。
如何在比例不失真的状况下显示一张图片?
1个pt能够有1个px构成,也能够有2个,3个甚至更多构成
一个pt下px越多,图像显示越细腻。两倍已经达到了人眼可以分辨的极限,因此plus版本并不能比6和6S更加清晰。
iphone6下2个px构成1个pt
PPI=px开根号/屏幕尺寸
由于微信小程序显示的375是逻辑分辨率,而设计图通常给的是物理分辨率。
使用rpx做为单位,小程序会自动在不一样的分辨率下进行转换。
在iphone6的尺寸进行设计的话,一个像素就是一个rpx。
不是全部的单位都适合用rpx
好比,文字不适合用rpx,否则设备自适应之后看不清文字。
错误VM285:1 pages/index/index.js 出现脚本错误或者未正确调用 Page()
须要在这个js里写一个page方法,里面什么都不写就能够。
一、在page文件夹下新建posts文件夹,在其中创建.js.wxml.wxss文件,并在.js文件中填入空的Page函数(若是不填会报错)。
二、将原先的app.json的pages属性数组之中加入新建的.wxml文件的地址(当把它放在第一个的时候,运行时默认先显示它)。
注:快捷键F1打开命令面板,有不少快捷选项
swiper标签表明轮播图,里面的字标签swiper-item表明每一个图片。
代码示例:
swiper的相关属性:
在子页面的json文件里能够配置页面的导航栏颜色等配置,从而不影响全局的配置。
可是只能配置window这一个参数的属性,因此window就不标了。直接将app.json里的window参数展开,平铺到子页面的json文件中。
绝对路径与相对路径
部分代码示例
posts.wxss
经验:水平用rpx,垂直用px。(水平若是元素少到不可能发生换行也可用px)
posts.wxml
在编码过程当中,可使用脚本文件将服务器的数据对接到小程序中。
编写脚本文件时,在js文件中输入page,开发工具会生成一个默认的脚本文件结构。
js文件全部的脚本代码都会在名叫Page的json结构体中运行。
其中包含下列生命周期函数:
应用的生命周期:
先进行页面初始化(onLoad)—>页面显示(onShow)–>页面渲染完成(onReady)
注:js脚本中能够自定义函数进行调用
在公众平台之中小程序完整的生命周期图片以下
在网页开发的过程当中,咱们要把一个数据显示到页面上的操做是:
先获取DOM对象,再对获取的节点的数据进行操做。
在小程序中提倡数据优先的思想。
在小程序中不支持DOM,因此在小程序的开发中的操做应该是:
在js脚本的data属性中以json格式放入数据,在wxml文件中使用双大括号调用。
示例以下:
js脚本:
wxml:
小程序在这里实现的数据绑定是单向数据绑定
也就是说,数据能够从脚本文件向wxml文件传递的时候可直接赋值,可是若是数据被wxml文件所改变,脚本文件中的数据不会发生变化。若是要经过wxml改变脚本文件中的数据,则须要采起事件传递的形式。
显示从服务器动态获取的数据
假设数据是从脚本文件向服务器动态获取的,那么应该在页面初始化以后显示数据。也就是说数据绑定的操做应该写在onLoad函数里面来,以后再使用setData()函数平铺入data数组之中。
示例:
js脚本
对应wxml文件
注:
缘由:赋给这个属性的false是个字符串,小程序在解析字符串的时候会将其转换成布尔值,此字符串的布尔值是true。
例子以下:
解决方法:使用数据绑定的语法,将false用双花括号括起来,这样才会解析成false。
同理,设置某个属性为true的时候,随便置入一个字符串的值,都会被解析成true。
若是js脚本外再包一层json对象,那么须要经过"{{对象名.属性名}}"进行调用
示例:
注:两个数据绑定挨在一块儿是能够正常解析的。
使用示例:
固然,能够经过脚本文件来动态控制标签元素的显示与隐藏。
好比:
同理,也能够在双花括号之中进行加减乘除的数字计算。
若是服务器拿过来的数据是一个json数组,那么须要小程序的for循环进行动态的展现。
json数组示例:
以上作法会出现显示不了的问题
缘由:this.setData方法是将参数平铺置入data数组中,在进行循环显示的时候会显示不全。
解决方法:给数据数组一个key并置入data中,这样data解析出来就会是一个数组。
wxml展现示例:
block标签:理解为括号,将循环体给包裹起来
注:若是指代为item,则可省略。由于微信小程序默认的元素指代就是以item命名的。
一、在app.json的页面指定的位置将欢迎页设置为第一个页面。
二、目的:点击欢迎页的按钮,跳转到以前作好的新闻展现页中(上图页面对应posts)
三、绑定事件–tap事件(tap事件详情见以下表格)
标签事件绑定的写法:事件名前面加bind
4.在脚本文件中写入函数负责页面跳转
注:填入的url能够是相对路径也能够是绝对路径,可是须要和app.json中配置的形式一致(不要加.wxml)
5.设置将跳转进来的页面不设为上一个页面的子页面(取消左上角返回)
实现两个页面之间的平行跳转。
效果:
关于这两个函数完整的参数:
当调用wx.redirectTo方法时,脚本后台会调用onUnLoad(页面被卸载以后触发)事件。
当调用wx.navigateTo方法时,脚本后台会调用onHide(页面被隐藏以后触发)事件。
什么是事件?
使用WXS函数响应事件–基础库 2.4.4 开始支持,低版本需作兼容处理。
从基础库版本2.4.4开始,支持使用WXS函数绑定事件,WXS函数接受2个参数,第一个是event,在原有的event的基础上加了event.instance对象,第二个参数是ownerInstance,和event.instance同样是一个ComponentDescriptor对象。
事件分为冒泡事件和非冒泡事件:
WXML的冒泡事件列表:
注:除上表以外的其余组件自定义事件如无特殊声明都是非冒泡事件,如 form 的submit事件,input 的input事件,scroll-view 的scroll事件,(详见各个组件)
事件绑定的写法同组件的属性,以 key、value 的形式。
key 以bind或catch开头,而后跟上事件的类型,如bindtap、catchtouchstart。自基础库版本 1.5.0 起,在非原生组件中,bind和catch后能够紧跟一个冒号,其含义不变,如bind:tap、catch:touchstart。
value 是一个字符串,须要在对应的 Page 中定义同名的函数。否则当触发事件的时候会报错。
bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定能够阻止冒泡事件向上冒泡。
正常的流程应该是从脚本文件向服务器发一个请求去请求数据到js脚本文件,可是小程序目前没有服务器数据,将数据大量罗列到js脚本文件很是的不利于阅读。
解决方式:
将所需数据全都放到一个单独的文件中去,从脚本文件加载数据文件,从而模拟从服务器加载数据的过程。
流量限制
关注公众号:Java架构师联盟,每日更新技术好文