一、微信小程序文件结构
1. 微信小程序文件
|--pages
|--index 首页文件包
视图层 wxml wxss
逻辑层 js
数据传输层
配置层 json
|--logs 日志页面
|--util 第三方工具js(可删除)
|--app.js 项目全局入口文件
|--app.json 全局配置文件
|--app.wxss 全局样式文件
|--proiect.config.json 项目的配置文件,如appid
|--sitemap.json 微信索引配置文件
2. app.json介绍
{
"pages": [ //页面文件路径,将文件路径放在最前面 微信打开就显示在首页
"pages/index/index",
"pages/expert/expert",
],
"window": { //全局默认窗口属性
"backgroundTextStyle": "light", //窗口下拉刷新的图标颜色
"navigationBarBackgroundColor": "#eb4450", //窗口导航栏背景颜色
"navigationBarTitleText": "小程序", //窗口导航栏标题
"navigationBarTextStyle": "white" //窗口导航栏字体颜色,仅支持黑色、白色
},
"tabBar": { //导航菜单
"color": "#78787c", //导航菜单字体颜色
"selectedColor": "#eb4450", //导航菜单选择后字体颜色
"backgroundColor": "#ffffff", //导航栏背景颜色
"position": "bottom",//导航栏位置
"borderStyle": "black", //导航栏边框颜色
"list": [ //导航列表,至少要包含两个导航页面
{
"pagePath": "pages/index/index", //页面路径,当点击图标时进行跳转到指定页面
"text": "探索", //导航标题
"iconPath": "icons/search.png", //导航图标
"selectedIconPath": "icons/search_red.png" //点击图标时的变化图片
},
{
"pagePath": "pages/expert/expert",
"text": "专家",
"iconPath": "icons/expert.png",
"selectedIconPath": "icons/expert_red.png"
},
{
"pagePath": "pages/share/share",
"text": "发布",
"iconPath": "icons/share.png",
"selectedIconPath": "icons/share_red.png"
},
{
"pagePath": "pages/my/my",
"text": "我的",
"iconPath": "icons/my.png",
"selectedIconPath": "icons/my_red.png"
}
]
},
"style": "v2",
"sitemapLocation": "sitemap.json"
}
二、数据绑定和数据渲染
1. 组件
|--text: 相当于html中 span 标签,行内元素,不会换行
|--selectable: 文本是否可选,可以进行文字复制
|--decode: 是否解码,可以对空格 回车进行编码
view: 相当于html中 div标签,块级元素,会换行
2. 数据绑定
page{//数据都放在data中
data:{
num:2000
}
}
wxml文件显示
<text>{{num}}</text>
3. 数据循环
(1)列表循环
wx:for="{{数组或对象}}"
wx:for-item="循环项的名称"
wx:for-index="循环向的索引"
wx:for-key="唯一的值" 用来提高列表的渲染性能
|--wx:key 绑定一个普通的字符串的时候,那么这个字符串名称肯定是循环数组中的对象的唯一值
|--wx:key = "*this" 表示你的数组是一个普通的数组,*this表示是循环项
|--notice:
|--当出现数组的嵌套的时候,要尤其注意wx:for-item wx:for-index 绑定的名称不要重名
|--默认情况下不写wx:for-item wx:for-index,小程序会把循环项的名称和索引的名称 item 和index 进行补充
|--当然在只有一层循环项时,wx:for-item wx:for-index可以省略
(2)对象循环
wx:for="{{对象}}"
wx:for-item="对象的值"
wx:for-index="对象的属性"
wx:for-key="唯一的值" 用来提高列表的渲染性能
|--notice:
|--循环对象时,最好把item和index的名称都进行修改
4. block标签:用于循环,不想进行额外添加一层标签可以使用
|--占位符的标签
|--写代码时,可以看到这个标签的存在
|--页面渲染时,小程序会把它进行移除
5. 条件渲染
|--wx:if="{{true/false}}"
|--wx:if wx:elif wx:else
|--hidden
|--在标签上直接添加hidden标签
|--hidden="{{true}}"
|--notice:
|--当标签不是频繁的切换显示,优先使用wx:if
直接将标签从页面结构上进行移除
|--当标签频繁的进行切换显示,优先使用hidden
通过添加样式的方式来切换显示
6. 事件绑定
<input type="text" bindinput="handleInput"/>
|--需要给input标签绑定input事件
|--绑定关键字 bindinput
|--如何获取输入框的值
|--通过事件源对象来获取 e.detail.value
|--把输入框的值,赋值到data当中
|--不能直接使用
|--this.data.name = e.detail.name
|--this.num = e.detail.value
|--正确做法
|--this.setData({
num:e.detail.value
})
<button bindtap="handletap" data-operation="{{1}}"></button>
handletap(e){
//获取自定义属性 operation
const operation = e.currentTarget.dataset.operation;
this.setData({
num:this.data.num = operation;
})
}
|--点击事件 bindtap
|--无法在小程序中的事件直接传参 bindtap="handletap"
|--通过自定义属性的方式来进行传参 data-operation="{{1}}"
|--事件源中获取自定义事件
三、样式
NOTICE:小程序中不需要主动引入wxss文件
1. 尺寸单位:rpx 自适应改变的像素单位
利用属性 calc(150rpx*100/375)
|--750和rpx之间不能有空格
|--运算符两边也不能有空格
2. 外部样式引入
|--利用@import进行引入
|--只能使用相对路径
3. swiper轮播图组件
<swiper>
<swiper-item>
<img src=""/>
</swiper-item>
</swiper>
|--轮播图外层容器 swiper
|--轮播项 swiper-item
|--swiper存在默认样式
|--width 100% height 150rpx
|--swiper高度无法实现由内容撑开
|--先找出原图的宽度和高度,等比例给swiper设定宽度和高度
|-- swiper高度 = swiper宽度 * 原图高度/原图宽度
4. navigator导航组件:类似于超链接标签
|--块级元素,默认会进行换行,可以直接加宽度和高度
|--url: 要跳转到的页面路径,使用绝对路径、相对路径均可
|--target: 要跳转到当前或者其他小程序的页面
|--self:默认值,自己小程序的页面
|--miniProgram:其他小程序的页面
|--open-type: 跳转方式
|--navigate