- 引言
- 构建
- 基础组件
- 功能组件
- 常用代码举例
- 参考文献
微信小程序,是腾讯结合 微信 sdk 推出的一种微信开发工具。可以使前端开发者调用 微信的 一些内置功能,开发出功能强大的小应用。
作为一个合格的前端开发人员,需要掌握和了解。
下面我们详细的介绍下开发一个微信小程序的步骤
构建
- 申请小程序账号: 进入 (开发者平台) [https://developers.weixin.qq.com ] 注册小程序账号,获取AppID。
- AppID 是小程序的 秘钥,通过 这个 id 开发者可以使用微信提供的 相应 sdk功能。
- 安装开发者工具: 通过官网 下载微信开发者工具,用于开发和调试。
- 启动微信开发者工具 自动创建一套 目录结构,我们就可以进行开发了。
- 微信小程序默认的代码结构 包含: JSON 配置 JS 脚本逻辑文件 WXML 模板文件 WXSS 样式文件。标配,不过有些文件格式是可选的。
基础组件
全局配置项
-
app.json : 是当前小程序的全局配置,包括了小程序的所有页面路径、界面表现、网络超时时间、底部 tab 等。( pages:[] window: {} tabBar: { list: [ ]} networkTimeout:{} debug: true ) 等
-
Pages:这个是编写的js文件,后缀.js这里不需要使用,配置好正确路径即可正常调用(若调用不到,在重启微信开发者工具会直接报 page 错误)。
-
Window:配置顶部的一些样式,文档介绍比较详细。
-
tabBar:底部的几项配置,见名知意。
-
networkTimeout:暂时没发现用处,建议看文档。根据实际项目需求进行添加与更改。
-
iconPath和selectedIconPath:底部菜单按钮图片与得到切换点击高亮。
-
text:可以去掉,全部去掉会发现底部tabar高度会减少很多。
-
「Color」是底部字体颜色,「selectedColor」是切换到该页面高亮颜色,「borderStyle」是切换菜单上面的一条线的颜色,「backgroundColor」是底部菜单栏背景颜色。文字描述较为抽象,建议你一一调试并查看其效果,加深印象。
-
「“list”」下的代码顺序必须依次放置,不能随便更改。
-
「”pagePath”」之后的文件名内,「.wxml」后缀被隐藏起来了,这是微信开发代码中人性化的一点——帮你节约写代码的时间,无须频繁声明文件后缀。
-
「”iconPath”」为未获得显示页面的图标路径,这两个路径可以直接是网络图标。
-
「”selectedIconPath”」为当前显示页面高亮图标路径,可以去掉,去掉之后会默认显示为「”iconPath”」的图标。
-
「”Text”」为页面标题,也可以去掉,去掉之后纯显示图标,如只去掉其中一个,该位置会被占用。
-
project.config.json:工具配置 你在工具上做的任何配置都会写入到这个文件,当你重新安装工具或者换电脑工作时,你只要载入同一个项目的代码包,开发者工具就自动会帮你恢复到当时你开发项目时的个性化配置
```
{
"pages": [
"pages/views/mall/mall",
"pages/index/index",
"pages/logs/logs",
"pages/views/common/common"
],
"window": {
"navigationBarBackgroundColor": "#55e298", # 顶部导航颜色
"navigationStyle": "custom", # 自定义顶部条可用
"backgroundTextStyle": "light",
"backgroundColor": "#f5f7f8",# 页面背景色
"navigationBarTitleText": "WeChat",
"navigationBarTextStyle": "black"
},
"tabBar": {
"list": [{
"pagePath": "pages/views/mall/mall",
"text": "首页"
}, {
"pagePath": "pages/logs/logs",
"text": "日志"
}]
},
"networkTimeout": {
"request": 10000,
"downloadFile": 10000
},
"debug": true
}
```
wxml 文件
就是.wxml 定义的文件。微信小程序不支持 html 常用的 如:div 等标签,它通过一套自定义的标签实现了浏览器的dom树结构。我们只需要记住常用的一些标签,就可以完成一个漂亮的小程序页面。(view, button, text)
通常在视图层中我们可以 进行 数据绑定、列表渲染、条件渲染、模板、事件、引用等操作。
数据绑定 {{userInfo.avatarUrl}} 、<image class="widgets__info-img" src="" backgrund-size="cover"/>
列表渲染 wx:for="{{array}}"
条件渲染 wx:if="{{view == 'WEBVIEW'}}" {{viewShow ? 'widgets__info_show' : ''}}
模板 <template is="staffName" data="{{...staffA}}"></template>
事件 <view bindtap="add"> {{count}} </view>
引用 <import src="item.wxml" /> <include src="header.wxml" />
引用
import(动态)
import
可以在该文件中使用目标文件定义的template
<!-- item.wxml -->
<template name="item">
<text>{{text}}</text>
</template>
// 使用
<import src="item.wxml"/>
<template is="item" data="{{text: 'forbar'}}"/>
include(静态)
include
可以将目标文件除了 <template/>
<wxs/>
外的整个代码引入,相当于是拷贝到 include
位置。
<include src="header.wxml"/>
<!-- header.wxml -->
<view> header </view>
wxss文件
-
新增了尺寸单位。rpx
-
提供了全局的样式和局部样式。
json文件
设置单独页面的全局样式 通常是:"navigationBarTitleText": "获取手机系统信息"
js文件
是页面的脚本文件,在这个文件中我们可以监听并处理页面的生命周期函数、获取小程序实例,声明并处理数据,响应页面交互事件等。
生命周期 Launch-->App Show-->onload-->onShow-->onReady
- 使用 Page({ }) 定义方法 :data: {} onLoad() {} 等 参数
- 使用 this.setData({ msg: "Hello World" }) 修改页面 {{ msg }} 变量的值 或者 Page 中的 data.msg 值
- 使用 bindtap="clickMe" 在页面上绑定事件
组件
- 组件引入 <import src="../common/footer.wxml" />
- 组件调用 <template is="header" data="{{title: 'navigateTo/Back, redirectTo'}}"/>
- 自定义组件
- 组件的事件
- 组件生命周期
- 行为
- 组件之间传参数
页面间跳转
wx.navigateBack
关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层。
wx.navigateTo
保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack
可以返回到原页面
wx.redirectTo
关闭当前页面,跳转到应用内的某个页面
wx.navigateTo({url:/pages/text/index?text=${121212}})
wx.redirectTo({url:`/pages/text/index?text=${121212}`})
wx.navigateBack({ delta: 1 })
基础模块
微信提供了一套基础模块模板,他们是 视图、按钮、表单、轮播图、checkbox、icon、image、input、label、mask、modal、navigator picker、progress、radio、slierBar、rich-text 、progress。可以完成常规的页面级需求。
注意事项
- 不要直接操作
this.data
,使用this.setData函数,切记、切记wcss
文件里面不能使用本地图片,请使用base64、网上图片或者image
- 使用sass写
wxss
文件,在目录下创建index.scss
文件,当前目录下执行sass --watch index.scss:index.wxss --style expanded
- 事件列表: bindtap bindchange bindfocus
- Template:定义一个模板,name 模板的名字其实是个作用域。is 和 name 一样,data 是 nameData 传递过来的数据填充。
- Block:循环控制。
- 支持自定义属性 data
- View 里面是一些数据引入,里面是支持三目运算符。
- 将图片都放到服务器,然后直接采用网络路径。
- 将图片都转换成 base64 的图片保存,使用时直接引入。
- images 文件夹 放入到 pages 下面 ,通过 ../../images/icon30_m.png 相对路径引入
- 转换工具:https://rattenking.gitee.io/stone/demo/imgbase64/imgbase64.html
- 微信的底部菜单最多支持五栏(五个 icons),所以在你设计微信应用的 UI 和基本架构时就要预先考虑好菜单栏的排布。
- 文件路由需及时在「app.json」里预先配置好。
- 引入样式:@import "../common/header/header.wxss"; 在页面跳转之间 template 创建的代码,需要单独引入公共部分样式。(页面嵌套引起的bug)
功能组件
微信还提供了一套结合 sdk 的功能模块。
- 文件下载
-
设置页面头部
- wx.setNavigationBarTitle({ title: 标题 })
-
检查网络连接
-
request 发送数据请求
-
上传文件
-
webSocket服务
-
音频
-
背景音频
-
相机
- wx.chooseImage({sourceType,sizeType,count,succ, fail})
-
字体
-
图片预览
-
录音
-
实时音频传送
-
视频
-
文件处理
- wx.saveFile({ tempFilePath, succ,fail})
-
数据缓存
-
下拉数据刷新
- wx.stopPullDownRefresh({
- complete: function (res) {
- console.log(res, new Date())
- }
- complete: function (res) {
- })
- wx.stopPullDownRefresh({
-
位置监控
- wx.getLocation( { succ, fail })
- wx.openLocation({
- longitude: Number(value.longitude),
- latitude: Number(value.latitude),
- name: value.name,
- address: value.address
- })
-
电量监控
-
加速计
-
蓝牙检测
-
剪切板
-
罗盘
-
联系人列表
-
设备方向
-
拨打电话
-
扫码
- wx.chooseImage({count:1, sizeType: ['original','compressed'], sourceType:['album','camera'], success:function(res) {}})
-
屏幕信息
-
震动检测
-
Wifi 检测
-
登录信息
- wx.login({ succ, fail });
-
小程序之间跳转
- 跳转新页面:wx.navigateTo({ url: './navigator' })
- 返回上一页:wx.navigateBack()
- 在当前页面打开:wx.redirectTo({ url: './navigator' })
-
支付跳转
-
附近小程序
-
系统信息
- wx.getSystemInfo({ succ, fail });
-
常用代码举例
// wxml
<view style="display:{{show}}">{{text}}</view>
<text class="title">我的金币(枚) <label>88</label></text>
<image src="{{item.url == null ? 'images/thum.png': item.url}}" background-size="cover"></image>
<button bindtap="change" data-test="哈哈">点击更改上面文字</button>
// 循环
<view wx:for-items="{{}}" wx:for-item="card" wx:for-index="ci"></view>
// js
Page({
data: {
text: "测试"
},
onLoad() {
console.log("hello test")
console.log(this.data.text);
},
bindButtonTapSheet:function(e){
//调取底部下拉菜单栏
},
change(e) {
this.setData({
text:e.currentTarget.dataset.test
})
}
});
<view id="view" class="widgets__info {{viewShow ? 'widgets__info_show' : ''}}" bindtap="widgetsToggle">
<text class="widgets__info-name">内容分区</text>
<image class="widgets__info-img" src="" backgrund-size="cover"/>
</view>
<navigator url="widgets/wx-view/wx-view" redirect hover-class="className" class="widget">
<text class="widgets__name"> view </text>
<view class="widget__line"></view>
</navigator>
wx.showModal({
title: '提示',
content: wx.getStorageSync('title')
})
网友评论