开发小程序之前,必须要准备好相应的环境。
建议使用全新的邮箱,没有注册过其他小程序或者公众号的。
访问注册页面,耐心完成注册即可。
vs code + 微信小程序编辑工具
来实现编码。
结构 | 传统 Web | 微信小程序 |
---|---|---|
结构 | HTML | WXML |
样式 | CSS | WXSS |
逻辑 | JavaScript | JavaScript |
配置 | 无 | JSON |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fwpO6B5S-1642639773070)(D:\前端笔记\image\小程序项目结构.png)]
app.josn
和页面自己的page.json
注意:配置文件中不能出现注释。
app.json 是当前小程序的全局配置,包括了小程序的所有页面路径、界面表现、网络超时时间、底部 Tab 等。普通快速启动项目里边的 app.json 配置。
{
// 页面
"pages":[
"pages/index/index",
"pages/logs/logs"
],
// 全局默认窗口表现
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#FFF",
"navigationBarTitleText": "Weixin",
"navigationBarTextStyle":"black"
},
"style": "v2",
"sitemapLocation": "sitemap.json"
}
字段的含义:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IcFIumsE-1642639773070)(D:\前端笔记\image\tabbar.png)]
page.json 是用来表示页面目录下到的 page.json 这类和小程序页面相关的配置。
开发者可以独立定义每个页面的一些属性,如顶部颜色、是否允许下拉等等。
页面的配置只能设置 app.json 中部分 window 配置项的内容,页面中配置项会覆盖 app.json 的 window 中相同的配置项。
属性 | 类型 | 默认值 | 描述 |
---|---|---|---|
navigationBarBackgroundColor | HexColor | #000000 | 导航栏背景颜色 |
navigationBarTextStyle | String | white | 导航栏标题颜色,仅支持 black / white |
navigationBarTitleText | String | 导航栏标题文字内容 | |
backgroundColor | HexColor | #ffffff | 窗口的背景色 |
backgroundTextStyle | String | dark | 下拉 loading 的样式,仅支持 dark / light |
enablePullDownRefresh | Boolean | false | 是否全局开启下拉刷新 |
onReachBottomDistance | Number | 50 | 页面上拉触底事件触发时距 |
disableScroll | Boolean | false |
小程序目录下的 sitemap.json 文件用于配置小程序及其页面是否允许被微信索引。
WXML (WeiXin Markup Language) 是框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的逻辑。
{{ message }}
Page({
data: {
message: 'Hello MINA!'
}
})
{{ message }}
Page({
data: {
id: 0
}
})
Hidden
{{a + b}} + {{c}} + d
Page({
data: {
a: 1,
b: 2,
c: 3,
}
})
{{"hello" + name}}
项的变量名默认为 item wx:for-item 可以指定数组当前元素的变量名。
下标变量名默认为 index wx:for-index 可以指定数组当前下标的变量名。
wx:key 用来提高数组渲染的性能。
wx:key 绑定的值,有以下几种选择:
String 类型,表示循环项中的唯一属性。
list:[{id:0,name:"炒饭"},{id:1,name:"炒面"}]
保留字 this 它的意思是 item 本身,*this 代表的必须是唯一的字符串和数组。
list[1,2,3,4,5]
wx:key="*this"
只有一层循环的时候,wx:for-item=“item” 和 wx:for-index=“index” 可以省略。
渲染一个包含多字节的结构块 block 最终不会变成真正的 DOM 元素。
在框架中,使用 wx:if=“{{condition}}” 来判断是否需要渲染该代码块。
1
2
3
<view hidden="{{condition}}">Trueview>
Page({
// 绑定的事件
handleInput: function(e) {
console.log(e);
console.log("值被改变了!")
}
})
绑定事件时不能带参数,不能带括号,以下为错误写法:
<input bindinput="handleIput(100)" />
事件传值,通过标签自定义属性的方式和 value 。
rpx可以根据屏幕宽度进行自适应。规定屏幕宽度为 750rpx 。如在 iphone6 上,屏幕宽度为 375px ,共有 750 个物理像素,则 750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。
设备 | rpx 换算 px (屏幕宽度 / 750) | px 换算 rpx (750 / 屏幕宽度) |
---|---|---|
iphone5 | 1rpx = 0.42px | 1px = 2.34rpx |
iphone6 | 1rpx = 0.5px | 1px = 2rpx |
iphone6 Plus | 1rpx = 0.552px | 1px = 1.81rpx |
使用步骤:
确定设计稿宽度 pageWidth 。
确定比例 750rpx = pageWidth px ,因此 1px = 750rpx / pageWidth 。
在 less 文件中,只要把设计稿中的 px => 750/pageWidth rpx 即可。
/*
1. 利用一个属性 calc 属性(css 和 wxss 都支持的一个属性)。
* 750 和 rpx 中间不用加空格。
* 运算符的两边也不要加空格。
*/
/* width: 200rpx; */
height: 200px;
font-size: 40rpx;
background-color: aqua;
width: calc(750rpx*100/375);
wxss 中直接就支持,样式导入功能。
也可以和 less 中的导入混用。
使用 @import 语句可以导入外联样式表,只支持相对路径。
/** common.wxss **/
.small-p {
padding: 5px;
}
/** app.wxss **/
@import "common.wxss";
.middle-p {
padding: 15px;
}
特别注意的是小程序**不支持通配符 * **,因此以下代码无效:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
目前支持的选择器有:
选择器 | 样例 | 样例描述 |
---|---|---|
.class | .intro | 选择所有拥有 class = “intro” 的组件 |
#id | #firstname | 选择拥有 id = “firstname” 的组件 |
element | view | 选择所有 view 组件 |
element,element | view,checkbox | 选择所有文档的 view 组件和所有的 checkbox 组件 |
nth-child(n) | view:nth-child(n) | 选择某一个索引的标签 |
::after | view:after | 在 view 组件后边插入内容 |
::befor | view:before | 在 view 组件前边插入内容 |
原生小程序不支持 less ,其他基于小程序的框架大体都支持,如 wepy 、mpvue 、taro 等。但是仅仅因为一个 less 功能,而去引入一个框架,肯定是不可取的。因此可以用以下方式来实现。
编辑器是 vs code 。
安装插件 easy less 。
在 vs code 的设置中加入如下配置:
"less.compile": {
"outExt": ".wxss"
}
在要编写样式的地方,新建 less 文件,如 index.less 然后正常编辑即可。
代替原来的 div 标签。
<view hover-class="h-class">
点击我试试
view>
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
selectable | Boolean | false | 文本是否可选 |
decode | Boolean | false | 是否解码 |
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
src | String | 图片资源地址 | |
mode | String | ‘scaleToFill’ | 图片裁剪、缩放的模式 |
lazy-load | Boolean | false | 图片懒加载 |
微信内置轮播图组件。
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
indicator-dots | Boolean | false | 是否显示面板指示点 |
indicator-color | Color | rgba(0, 0, 0, 3) | 指示点颜色 |
indicator-active-color | Color | #000000 | 当前选中的指示点颜色 |
autoplay | Boolean | false | 是否自动切换 |
interval | Number | 5000 | 自动切换间隔时间 |
circular | Boolean | false | s是否轮播 |
导航组件,类似超链接标签
块级元素,默认会换行,可以直接加宽度和高度。
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
target | String | self | 在哪个目标上发生跳转,默认当前小程序,可选值 self/miniProgram |
url | String | 当前小程序的跳转链接 | |
open-type | String | navigate | 跳转方式 |
open-type 有效值
值 | 说明 |
---|---|
navigate | 保留当前页面,跳转到应用内的某个页面,但是不能跳到 tabBer 页面 |
redirect | 关闭当前页面,跳转到应用内的某个页面,但是不允许跳到 tabBer 页面 |
switchTab | 跳转到 tabBer 页面,并关闭其他所有非 tabBer 页面 |
reLaunch | 关闭所有页面,打开到应用内的某个页面 |
navigateBack | 关闭所有页面,返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层 |
exit | 退出小程序,target=“miniProgram” 时生效 |
富文本标签:
可以将字符串解析成对应标签,类似 Vue 中的 v-html 功能。
通过 HTML String 渲染
<div class="div_class">
<h1>
Title
h1>
<p class="p">
Life is <i>likei> abox of
<b> chocolatesb>
p>
div>
<button
type="defult"
size="{{defaultSize}}"
loading="loading"
plain="plain"
>
default
button>
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
size | string | default | 否 | 按钮的大小 |
type | string | default | 否 | 按钮的样式类型 |
plain | boolean | false | 否 | 按钮是否镂空,背景色透明 |
disabled | boolean | false | 否 | 是否禁用 |
loading | boolean | false | 否 | 名称前是否带 loading 图标 |
form-type | string | 否 | 用于组件,点击分别会触发组件的 submit/reset 事件 | |
open-type | string | 否 | 微信开放能力 |
值 | 说明 |
---|---|
default | 默认大小 |
mini | 小尺寸 |
值 | 说明 |
---|---|
primary | 绿色 |
default | 白色 |
warn | 红色 |
值 | 说明 |
---|---|
contact | 打开客服对话,如果用户在对话中点击消息卡片后返回小程序,可以从 bindcontact 回调中获得具体信息。 |
share | 触发用户转发,不能把小程序分享到朋友圈中的。 |
getPhoneNumber | 获取用户手机号,可以从 bindgetphonenumber 回调中获取到用户信息。 |
getUserInfo | 获取用户信息,可以从 binggetuserinfo 回调中获取到用户信息。 |
launchApp | 打开 APP ,可以通过 app-parameter 属性设定向 APP 传的参数。 |
openSetting | 打开授权设置页。 |
feedback | 打开“意见反馈”页面,用户可提交反馈内容并上传日志,开发者可以登录小程序管理后台后进入左侧菜单“客服反馈”页面获取到反馈内容。 |
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
type | string | 是 | icon 的类型,有效值:success,success_no_circle,info,warn,waiting,cancel | |
size | number/string | 23 | 否 | icon 的大小 |
color | string | 否 | icon 的颜色,同 css 的 color |
可以通过 color 属性来修改颜色。
可以通过 color 属性来修改颜色。
类似 Vue 或者 React 中的自定义组件。
类似于页面,一个自定义组件由 json wxml wxss js 4个文件组成。
<Tabs aaa="a123a">Tabs>
// 子组件js
properties: {
// 需要接收的数据的名称
aaa: {
// type:要接收的数据的类型
type: String,
// value: 默认值
value: ''
}
}
<view>
view>
Component 构造器可用于定义组件,调用 Component 构造器时可以指定组件的属性、数据、方法等。
定义段 | 类型 | 是否必填 | 描述 |
---|---|---|---|
properties | Object Map |
否 | 组件的对外属性,是属性名到属性设置的映射表。 |
data | Object | 否 | 组件的内部数据,和 properties 一同用于组件的模板渲染。 |
observers | Object | 否 | 组件数据字段监听器,用于监听 properties 和 data 的变化。 |
methods | Object | 否 | 组件的方法,包括事件响应函数和任意的自定义方法。 |
created | Function | 否 | 组件生命周期函数,在组件实例刚刚被创建时执行,注意此时不能调用 setData 。 |
attached | Function | 否 | 组件生命周期函数,在组件实例进入页面节点树时执行。 |
ready | Function | 否 | 组件生命周期函数,在组件布局完成后执行。 |
moved | Function | 否 | 组件生命周期函数,在组件实例被移动到节点树另一个位置时执行。 |
detached | Function | 否 | 组件生命周期函数,在组件实例被从页面节点树移除时执行。 |
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
onLaunch | function | 否 | 监听小程序初始化。(在应用第一次启动的时候,获取用户的个人信息) | |
onShow | function | 否 | 监听小程序启动或切前台。(对应用的数据或者页面效果重置) | |
onHide | function | 否 | 监听小程序切后台。(暂停或者清楚定时器) | |
onError | function | 否 | 错误监听函数。(在应用发生代码报错的时候,收集用户的错误信息,通过异步请求,将错误的信息发送后台去) | |
onPageNotFound | function | 否 | 页面不存在监听函数。(如果页面不存在了,通过js的方式来重新跳转页面,重新跳到第二个首页) |
属性 | 类型 | 说明 |
---|---|---|
data | Object | 页面的初始数据。 |
onLoad | function | 生命周期回调—监听页面加载。(发送异步请求来初始化页面数据) |
onShow | function | 生命周期回调—监听页面显示。 |
onReady | function | 生命周期回调—监听页面初次渲染完成。 |
onHide | function | 生命周期回调—监听页面隐藏。 |
onUnload | function | 生命周期回调—监听页面卸载。 |
onPullDownRefresh | function | 监听用户下拉动作。(页面的数据或者效果重新刷新) |
onReachBottom | function | 页面上拉触底事件的处理函数。(上拉加载下一页数据) |
onShareAppMessage | function | 用户点击右上角转发。 |
onPageScroll | function | 页面滚动触发事件的处理函数。 |
onResize | function | 页面尺寸改变时触发。 |
onTabltemTap | function | 当前是 Tab 页时,点击 Tab 时触发。 |