1.2 开发工具
uni-app 官方推荐使用 HBuilderX 来开发 uni-app 类型的项目。主要好处:
- 模板丰富
- 完善的智能提示
- 一键运行
当然,你依然可以根据自己的喜好,选择使用 VS Code、Sublime、记事本... 等自己喜欢的编辑器!
#1.2.1 下载 HBuilderX
- 访问 HBuilderX 的官网首页 https://www.dcloud.io/hbuilderx.html
- 点击首页的
DOWNLOAD
按钮 - 选择下载
正式版
->App 开发版
#1.2.2 安装 HBuilderX
- 将下载的
zip包
进行解压缩 - 将解压之后的文件夹,存放到纯英文的目录中(且不能包含括号等特殊字符)
- 双击
HBuilderX.exe
即可启动 HBuilderX
#1.2.3 安装 scss/sass 编译
为了方便编写样式(例如:<style lang="scss"></style>
),建议安装 scss/sass 编译
插件。插件下载地址:
进入插件下载页面之后,点击右上角的 使用 HBuilderX 导入插件
按钮进行自动安装,截图如下:
1.2 开发工具
uni-app 官方推荐使用 HBuilderX 来开发 uni-app 类型的项目。主要好处:
- 模板丰富
- 完善的智能提示
- 一键运行
当然,你依然可以根据自己的喜好,选择使用 VS Code、Sublime、记事本... 等自己喜欢的编辑器!
#1.2.1 下载 HBuilderX
- 访问 HBuilderX 的官网首页 https://www.dcloud.io/hbuilderx.html
- 点击首页的
DOWNLOAD
按钮 - 选择下载
正式版
->App 开发版
#1.2.2 安装 HBuilderX
- 将下载的
zip包
进行解压缩 - 将解压之后的文件夹,存放到纯英文的目录中(且不能包含括号等特殊字符)
- 双击
HBuilderX.exe
即可启动 HBuilderX
#1.2.3 安装 scss/sass 编译
为了方便编写样式(例如:<style lang="scss"></style>
),建议安装 scss/sass 编译
插件。插件下载地址:
进入插件下载页面之后,点击右上角的 使用 HBuilderX 导入插件
按钮进行自动安装,截图如下:
1.2.4 快捷键方案切换
操作步骤:工具 -> 预设快捷键方案切换 -> VS Code
#1.2.5 修改编辑器的基本设置
操作步骤:工具 -> 设置 -> 打开 Settings.json 按需进行配置
源码视图下可用的参考配置:
{
"editor.colorScheme": "Default",
"editor.fontSize": 12,
"editor.fontFamily": "Consolas",
"editor.fontFmyCHS": "微软雅黑 Light",
"editor.insertSpaces": true,
"editor.lineHeight": "1.5",
"editor.minimap.enabled": false,
"editor.mouseWheelZoom": true,
"editor.onlyHighlightWord": false,
"editor.tabSize": 2,
"editor.wordWrap": true,
"explorer.iconTheme": "vs-seti",
"editor.codeassist.px2rem.enabel": false,
"editor.codeassist.px2upx.enabel": false
}
Tips:可以使用 Ctrl + 鼠标滚轮 缩放编辑器
1.3 新建 uni-app 项目
- 文件 -> 新建 -> 项目
- 填写项目基本信息
- 项目创建成功
#1.4 目录结构
一个 uni-app 项目,默认包含如下目录及文件:
┌─components uni-app组件目录
│ └─comp-a.vue 可复用的a组件
├─pages 业务页面文件存放的目录
│ ├─index
│ │ └─index.vue index页面
│ └─list
│ └─list.vue list页面
├─static 存放应用引用静态资源(如图片、视频等)的目录,注意:静态资源只能存放于此
├─main.js Vue初始化入口文件
├─App.vue 应用配置,用来配置小程序的全局样式、生命周期函数等
├─manifest.json 配置应用名称、appid、logo、版本等打包信息
└─pages.json 配置页面路径、页面窗口样式、tabBar、navigationBar 等页面类信息
#1.5 把项目运行到微信开发者工具
- 填写自己的微信小程序的 AppID:
- 在 HBuilderX 中,配置“微信开发者工具”的安装路径:
- 在微信开发者工具中,通过
设置 -> 安全设置
面板,开启“微信开发者工具”的服务端口: - 在 HBuilderX 中,点击菜单栏中的
运行 -> 运行到小程序模拟器 -> 微信开发者工具
,将当前 uni-app 项目编译之后,自动运行到微信开发者工具中,从而方便查看项目效果与调试: - 初次运行成功之后的项目效果:
取消控制台警告信息:
1.6 使用 Git 管理项目
#1.6.1 本地管理
- 在项目根目录中新建
.gitignore
忽略文件,并配置如下:
# 忽略 node_modules 目录
/node_modules
/unpackage/dist
注意:由于我们忽略了 unpackage 目录中仅有的 dist 目录,因此默认情况下, unpackage 目录不会被 Git 追踪
此时,为了让 Git 能够正常追踪 unpackage 目录,按照惯例,我们可以在 unpackage 目录下创建一个叫做
.gitkeep
的文件进行占位
- 打开终端,切换到项目根目录中,运行如下的命令,初始化本地 Git 仓库:
git init
- 将所有文件都加入到暂存区:
git add .
- 本地提交更新:
git commit -m "init project"
#1.6.2 把项目托管到码云
- 注册并激活码云账号( 注册页面地址:https://gitee.com/signup )
- 生成并配置 SSH 公钥
- 创建空白的码云仓库
- 把本地项目上传到码云对应的空白仓库中
-----------------------------------------------------------------------------------------------------------------------------
tabBar:(小程序02)
1. tabBar 的 6 个组成部分
① backgroundColor : tabBar 的背景色
② selectedIconPath :选中时的图片路径
③ borderStyle : tabBar 上边框的颜色
④ iconPath :未选中时的图片路径
⑤ selectedColor : tab 上的文字选中时的颜色
⑥ color : tab 上文字的默认(未选中)颜色
具体示意图如下 :
实操步骤:
1.新建页面
2.配置tabBar
①和"globalStyle"平级,新增 tabBar 节点
② tabBar 节点中,新增 list 数组,这个数组中存放的,是每个 tab 项的配置对象
③ 在 list 数组中,新增每一个 tab 项的配置对象。对象中包含的属性如下:
pagePath 指定当前 tab 对应的页面路径【必填】
text 指定当前 tab 上按钮的文字【必填】
iconPath 指定当前 tab 未选中时候的图片路径【可选】
selectedIconPath 指定当前 tab 被选中后高亮的图片路径【可选】
"tabBar": {
"backgroundColor":"#C0C0C0",
"selectedColor": "#C00000",
"list": [
{
"pagePath": "pages/home/home",
"text": "首页",
"iconPath": "static/tab_icons/home.png",
"selectedIconPath": "static/tab_icons/home-active.png"
},
{
"pagePath": "pages/cate/cate",
"text": "分类",
"iconPath": "static/tab_icons/cate.png",
"selectedIconPath": "static/tab_icons/cate-active.png"
},
{
"pagePath": "pages/cart/cart",
"text": "购物车",
"iconPath": "static/tab_icons/cart.png",
"selectedIconPath": "static/tab_icons/cart-active.png"
},
{
"pagePath": "pages/my/my",
"text": "我的",
"iconPath": "static/tab_icons/my.png",
"selectedIconPath": "static/tab_icons/my-active.png"
}
]
}
2.3 删除默认的 index 首页
- 在 HBuilderX 中,把
pages
目录下的index首页文件夹
删除掉 - 同时,把
page.json
中记录的index 首页
路径删除掉 - 为了防止小程序运行失败,在微信开发者工具中,手动删除
pages
目录下的index 首页文件夹
- 同时,把
components
目录下的uni-link 组件文件夹
删除掉
#2.4 修改导航条的样式效果==》
3.2. window---(小程序02)---未复习!!!
- 打开
pages.json
这个全局的配置文件 - 修改
globalStyle
节点如下:
{
"globalStyle": {
"navigationBarTextStyle": "white",
"navigationBarTitleText": "黑马优购",
"navigationBarBackgroundColor": "#C00000",
"backgroundColor": "#FFFFFF"
}
}
2.5 分支的提交与合并
- 1将本地的 tabbar 分支进行本地的 commit 提交:
git add .
git commit -m "完成了 tabBar 的开发"
- 2将本地的 tabbar 分支推送到远程仓库进行保存:
git push -u origin tabbar
- 3将本地的 tabbar 分支合并到本地的 master 分支:
git checkout master
git merge tabbar
- 4删除本地的 tabbar 分支:
git branch -d tabbar
3. 首页
#3.0 创建 home 分支
运行如下的命令,基于 master 分支在本地创建 home 子分支,用来开发和 home 首页相关的功能:
3.1 配置网络请求
.网络数据请求(小程序02)
复习:
注意事项:
① 域名只支持 https 协议
② 域名不能使用 IP 地址或 localhost
③ 域名必须经过 ICP 备案
④ 服务器域名一个月内最多可申请 5 次修改
调用微信小程序提供的 wx.request() 方法,可以发起 GET,POST 数据请求,
-------------------------------------------------------------------------
由于平台的限制,小程序项目中不支持 axios,而且原生的 wx.request()
API 功能较为简单,不支持拦截器等全局定制的功能。因此,建议在 uni-app 项目中使用 @escook/request-miniprogram
第三方包发起网络数据请求。
请参考 @escook/request-miniprogram 的官方文档进行安装、配置、使用
官方文档:https://www.npmjs.com/package/@escook/request-miniprogram
最终,在项目的 main.js
入口文件中,通过如下的方式进行配置:
import { $http } from '@escook/request-miniprogram'
uni.$http = $http
// 配置请求根路径
$http.baseUrl = 'https://www.uinav.com'
// 请求开始之前做一些事情
$http.beforeRequest = function (options) {
uni.showLoading({
title: '数据加载中...',
})
}
// 请求完成之后做一些事情
$http.afterRequest = function () {
uni.hideLoading()
}
3.2 轮播图区域
#3.2.1 请求轮播图的数据
实现步骤:
- 在 data 中定义轮播图的数组
- 在 onLoad 生命周期函数中调用获取轮播图数据的方法
- 在 methods 中定义获取轮播图数据的方法
示例代码:
export default {
data() {
return {
// 1. 轮播图的数据列表,默认为空数组
swiperList: [],
}
},
onLoad() {
// 2. 在小程序页面刚加载的时候,调用获取轮播图数据的方法
this.getSwiperList()
},
methods: {
// 3. 获取轮播图数据的方法
async getSwiperList() {
// 3.1 发起请求
const { data: res } = await uni.$http.get('/api/public/v1/home/swiperdata')
// 3.2 请求失败
if (res.meta.status !== 200) {
return uni.showToast({
title: '数据请求失败!',
duration: 1500,
icon: 'none',
})
}
// 3.3 请求成功,为 data 中的数据赋值
this.swiperList = res.message
},
},
}
3.2.2 渲染轮播图的 UI 结构
知识点:轮播图组件的使用(小程序01)
4.2.4. swiper 组件的使用
swiper 组件主要是用来实现轮播图效果 , swiper 组件相当于一个大盒子 , swiper - item 指的是轮播图
的每一项
代码如下 :
- 渲染 UI 结构:
<template>
<view>
<!-- 轮播图区域 -->
<swiper :indicator-dots="true" :autoplay="true" :interval="3000" :duration="1000" :circular="true">
<!-- 循环渲染轮播图的 item 项 -->
<swiper-item v-for="(item, i) in swiperList" :key="i">
<view class="swiper-item">
<!-- 动态绑定图片的 src 属性 -->
<image :src="item.image_src"></image>
</view>
</swiper-item>
</swiper>
</view>
</template>
2.样式:
美化 UI 结构:
<style lang="scss">
swiper {
height: 330rpx;
.swiper-item,
image {
width: 100%;
height: 100%;
}
}
</style>
3.2.3 配置小程序分包
3. 分包(小程序05)
复习:
1. 什么是分包
分包指的是把一个 完整的小程序项目 ,按照需求 划分为不同的子包 ,在构建时打包成不同的分包,用户
在使用时按需进行加载。
2. 分包的好处
对小程序进行分包的好处主要有以下两点:
可以优化小程序首次启动的下载时间
在多团队共同开发时可以更好的解耦协作
3. 分包前 项目的构成
分包前,小程序项目中所有的页面和资源都被打包到了一起,导致整个项目体积过大,影响小程序首次
启动的下载时间。
4. 分包后 项目的构成
分包后,小程序项目由 1 个主包 + 多个分包 组成:
主包 :一般只包含项目的 启动页面 或 TabBar 页面 、以及所有分包都需要用到的一些 公共资源
分包 :只包含和当前分包有关的页面和 私有资源
5. 分包的加载规则
① 在小程序启动时,默认会下载 主包并启动主包内页面 tabBar 页面需要放到主包中
② 当用户进入分包内某个页面时, 客户端会把对应分包下载下来 ,下载完成后再进行展示
非 tabBar 页面可以按照功能的不同,划分为不同的分包之后,进行按需下载
6. 分包的体积限制
目前,小程序分包的大小有以下两个限制:
整个小程序所有分包大小不超过 16M (主包 + 所有分包)
单个分包 / 主包大小不能超过 2M
3.2. 使用分包
1. 配置方法
在 app.json 配置文件中 , 新增 subpackages 的节点 , 将希望放到分包的页面 , 写入 subpackages 数组的
元素中 .
2. 打包原则
① 小程序会按 subpackages 的配置进行分包, subpackages 之外的目录将被打包到主包中
② 主包也可以有自己的 pages (即最外层的 pages 字段)
③ tabBar 页面必须在主包内
④ 分包之间不能互相嵌套
3. 引用原则
① 主包无法引用分包内的私有资源
② 分包之间不能相互引用私有资源
③ 分包可以引用主包内的公共资源
3.3. 独立分包
1. 什么是独立分包
独立分包 本质上也是分包,只不过它比较特殊,可以独立于主包和其他分包而 单独运行 。
独立分包和普通分包的区别
最主要的区别: 是否依赖于主包才能运行
普通分包必须依赖于主包才能运行
独立分包可以在不下载主包的情况下, 独立运行
3. 独立分包的应用场景
开发者可以按需,将某些 具有一定功能独立性的页面配置到独立分包中 。原因如下:
当小程序从普通的分包页面启动时,需要首先下载主包
而独立分包 不依赖主包 即可运行,可以 很大程度上提升分包页面的启动速度
注意 : 一个小程序中可以有多个独立分包 。
4. 独立分包的配置方法
和普通分包对比 , 独立分包就是在 subpackages 数组的某个元素中 , 配置 independent 为 true 即可
5. 引用原则
独立分包和普通分包以及主包之间,是 相互隔绝 的,不能相互引用彼此的资源!例如:
① 主包无法引用独立分包内的私有资源
② 独立分包之间,不能相互引用私有资源
③ 独立分包和普通分包之间,不能相互引用私有资源
④ 特别注意: 独立分包中不能引用主包内的公共资源
3.4. 分包预下载
1. 什么是分包预下载
分包预下载指的是:在进入小程序的某个页面时, 由框架自动预下载可能需要的分包 ,从而 提升 进入后
续分包页面时的启动速度。
2. 配置分包的预下载
预下载分包的行为,会在进入指定的页面时触发。在 app.json 中,使用 preloadRule 节点定义分包
的预下载规则,示例代码如下:
3. 分包预下载的限制
同一个分包中的页面享有共同的 预下载大小限额 2M ,例如:
在
subpkg
目录上鼠标右键,点击 新建页面
选项,并填写页面的相关信息:
3.2.4 点击轮播图跳转到商品详情页面
知识点:声明式导航(小程序03)
小程序中实现页面导航的两种方式
① 声明式导航
在页面上声明一个 导航组件
通过点击 组件实现页面跳转
② 编程式导航
调用小程序的导航 API ,实现页面的跳转
1.1. 声明式导航
1. 导航到 tabBar 页面
tabBar 页面指的是被配置为 tabBar 的页面。
在使用 组件跳转到指定的 tabBar 页面时,需要指定 url 属性和 open - type 属性,其中:
url 表示要跳转的页面的地址,必须以 / 开头
open - type 表示跳转的方式,必须为 switchTab
示例代码如下:
导航到非 tabBar 页面
非 tabBar 页面指的是没有被配置为 tabBar 的页面。
在使用 组件跳转到普通的非 tabBar 页面时,则需要指定 url 属性和 open - type 属性,其中:
url 表示要跳转的页面的地址,必须以 / 开头
open - type 表示跳转的方式,必须为 navigate
为了方便 , 非 tabBar 页码的跳转时 open - type 也可以省略
示例代码如下:
3. 后退导航
如果要后退到上一页面或多级页面,则需要指定 open - type 属性和 delta 属性,其中:
open - type 的值必须是 navigateBack ,表示要进行后退导航
delta 的值必须是数字,表示要后退的层级
示例代码如下:
注意:
为了简便,如果只是后退到上一页面,则可以省略 delta 属性,因为其默认值就是 1
tabBar 页面是不能实现后退的效果的 . 因为 , 当我们跳转到 tabBar 页面,会关闭其他所有非
tabBar 页面 , 所以当处于 tabBar 页面时 , 无页面可退
1.3. 导航传参
1. 声明式导航传参
navigator 组件的 url 属性用来指定将要跳转到的页面的路径。同时,路径的后面还可以携带参数:
参数与路径之间使用 ? 分隔
参数键与参数值用 = 相连
不同参数用 & 分隔
代码示例如下:
在 onLoad 中接收导航参数
通过 声明式导航传参 或 编程式导航传参 所携带的参数,可以直接在 onLoad 事件中直接获取到,示例代
码如下:
将 <swiper-item></swiper-item>
节点内的 view
组件,改造为 navigator
导航组件,并动态绑定 url 属性
的值。
--------------------------------------------------------------------------------下午:
渲染楼层的第一张图片(使用接口)对应的属性来进行渲染,样式的修改
2.左图片1层级
3.v-if和v-form不要同时使用!!!