uni-app笔记

大纲目录

      • 第1章 课程导学
      • 第2章 倘想达到最高处,就要从低处开始 (uni-app 基础)
        • 2-3 uni-app 核心知识点概览
        • 2-4 搭建uni-app开发环境
        • 2-5 语法速通-模板语法与数据绑定
        • 2-6 语法速通-条件判断
        • 2-7 语法速通-列表渲染
        • 2-8 语法速通-基础组件
        • 2-9 语法速通-自定义组件
        • 2-10 语法速通-api与条件编译
        • 2-11 生命周期概述
      • 第3章 千里之行,始于足下 (基础配置)
        • 3-1 uni-app 项目配置
        • 3-2 目录结构概述
        • 3-3 配置项目底部选项卡 - tabbar 配置
        • 3-4 在uni-app中如何使用sass
      • 第4章 工欲善其事,必先利其器 (uniCloud 的基础用法)
        • 4-1 认识 uniCloud开发
        • 4-2 HBuilderX 中配置 uniCloud 环境
        • 4-3 使用 uniCloud web 控制台
        • 4-4 开始使用云函数
        • 4-5 云数据库的添加和删除
        • 4-6 数据库的更新和查找
        • 4-7 使用云储存上传文件
      • 第5章 扬帆起航,胜利在向你招手 (首页功能模块)
        • 5-1 项目初始化
        • 5-2 自定义导航栏
        • 5-3 导航栏适配小程序
        • 5-4 使用字体图标
        • 5-5 选项卡展示
        • 5-6 选项卡数据初始化
        • 5-7 封装数据请求
        • 5-8 选项卡切换
        • 5-9 基础卡片视图实现
        • 5-10 更多卡片视图实现
        • 5-11 实现内容切换
        • 5-12 选项卡与内容联动
        • 5-13 内容卡片数据初始化
        • 5-14 切换选项卡懒加载数据
        • 5-15 -1 上拉加载更多(上)
        • 5-16 -2 上拉加载更多(下)
        • 5-17 -1 收藏按钮实现(上 )
        • 5-18 -2 收藏按钮实现(下)
      • 第6章 做事是否快捷,不在一时奋发,而在能否持久(搜索页功能模块)
        • 6-1 搜索页导航栏修改
        • 6-2 使用vuex 管理历史记录
        • 6-3 -1 搜索逻辑实现(上 )
        • 6-4 -2 搜索逻辑实现(下)
        • 6-5 搜索历史数据持久化
      • 第7章 锲而不舍,金石可镂(标签页功能模块)
        • 7-1 标签管理页布局样式
        • 7-2 标签页数据处理
        • 7-3 编辑标签页
        • 7-4 保存标签页数据
        • 7-5 使用自定义事件同步数据
      • 第8章 坚持就是胜利,坚持才会有所成就(详情页功能模块)
        • 8-1 详情页页面展示
        • 8-2 内容预加载
        • 8-3 详情页面数据初始化
        • 8-4 富文本渲染
        • 8-5 发布窗口展示
        • 8-6 评论内容实现(1)
        • 8-7 评论内容实现(2)
        • 8-8 评论内容实现(3)
        • 8-9 评论内容实现(4)
        • 8-10 评论内容实现 (5)
        • 8-11 评论内容实现(6)
        • 8-11 评论内容实现(6)
        • 8-12 关注作者(上)
        • 8-13 关注作者(下)
        • 8-14 文章的收藏与点赞(上)
        • 8-15 文章的收藏和点赞(下)
        • 8-16 评论列表(上)
        • 8-16 评论列表(上)
        • 8-17 评论列表(下)
      • 第9章 关注页功能模块
        • 9-1 关注页导航栏实现
        • 9-2 收藏文章内容实现
        • 9-3 收藏与首页内容关联
        • 9-4 关注作者页面实现
        • 9-5 同步关注作者页面数据
      • 第10章 个人信息页功能模块
        • 10-1 个人中心页面实现
        • 10-2 个人中心数据处理
        • 10-3 我的文章实现
        • 10-4 问题反馈页面实现
        • 10-5 反馈图片选择
        • 10-6 上传图片
      • 第11章 积少成多,走向完善(项目优化与平台兼容)
        • 11-1 微信小程序优化与兼容
        • 11-2 支付宝小程序优化与兼容
        • 11-3 其他平台优化与兼容
      • 第12章 最后的冲刺,成功就在眼前(项目发行与打包)
        • 12-1 h5端发行打包
        • 12-2 小程序端发行上传
        • 12-3 App 端发行打包
      • 第13章 常常是最后一把钥匙打开了门(课程总结与展望)
        • 13-1 课程回顾与总结


第1章 课程导学


第2章 倘想达到最高处,就要从低处开始 (uni-app 基础)

2-3 uni-app 核心知识点概览

1 条件编译

条件编译写法 说明
#ifdef APP-PLUS 需条件编译的代码 #endif 仅出现在 App 平台下的代码
#ifndef H5 需条件编译的代码 #endif 除了 H5 平台,其他平台均存在的代码
ifdef H5 || MP-WEIXIN 需条件编译的代码 #endif 在 H5 平台或微信小程序平台存在的代码(这里只有||, 不可能出现&&, 因为没有交集)

2 App 端的 Nvue 开发

3 HTML5+

2-4 搭建uni-app开发环境

1 安装并运行HbuiderX

2 使用 vue-cli 的方式运行项目

  1. 检查 node.js 版本 node -v # v14.15.4
  2. npm install -g cnpm --registry=https://registry.npm.taobao.org 设置镜像然后再 npm install -g @vue/cli 装到全局的环境中
  3. 自己出现了报错的情况,需要先运行 sudo chown -R $USER /usr/local 之后再安装就好了.
  4. 检查 vue-cli 是否安装 vue --version # 2.9.6
  5. 进入目录 vue create -p dcloudio/uni-preset-vue test-uniapp

2-5 语法速通-模板语法与数据绑定

{ {title}} 绑定变量
v-bind:class="className" 绑定class,可以简写为 :class="className"
v-on:click="open" 绑定事件,可以简写为 @click="open"

动态数据绑定 this.title = "hello" 这个和小程序中不同. 小程序中是 this.setData({xx: 'XX'})

2-6 语法速通-条件判断

v-if 条件判断, 为真的时候,才渲染. 为false则不渲染.

<view v-if="true">hello uni-appview>

v-if 绑定变量, 为false0的时候,不渲染

<view v-if="show">hello uni-appview>
...
data() {
	return {
		show: false
	}
},

v-if 中可以接表达式例如 v-if="show === 'hello'"

三元表达式 { {show ? 'hello' : 'world'}}

v-if v-else-if v-else, 根据参数来识别,这2个view要紧挨着. v-else-if可以省略.

<view v-if="show === 1">uni-appview>
<view v-else-if="show === 2">vueview>
<view v-else>view>

2-7 语法速通-列表渲染

v-for 通过一个数组来渲染我们的列表

<view v-for="(item,index) in arr" >{
    {item}}view>
...
<script>
	return {
      
		arr : ['uni-app', 'vue', 'html']
	}
script>

v-for 加上索引项 index 写法如下

<view v-for="(item,index) in arr" >{
    {(index+1) + ' ' +item}}view>
...
<script>
	return {
      
		arr : ['uni-app', 'vue', 'html']
	}
script>

v-for 循环打印 对象

<view v-for="(key,value) in arr" >{
    {key + ' ' +value}}view>
...
<script>
	return {
      
		arr: {
      
			name: 'LiMing',
			age: 18,
			type: 'eat'
		}
	}
script>

2-8 语法速通-基础组件

view text image

双向绑定 < input v-model="vlue" />

2-9 语法速通-自定义组件

① 在根目录中建立 components 文件夹, 再建立一个 /btn/btn.vue

btn.vue 源码如下,可以自己定义样式,行为.

<template>
	<view class="btn-box" @click="clickBox">
		点击
	view>
template>

<script>
	export default {
      
		methods: {
      
			clickBox() {
      
				console.log('click');
			}
		}
	}
script>

<style>
	.btn-box {
      
		width: 200px;
		height: 100px;
		text-align: center;
		line-height: 100px;
	}
style>

在需要的地方,进入,然后注册. components 注册组件,然后就可以直接使用了.

<template>
	<view class="content">
		<btn>btn>
	view>
template>

<script>
	import btn from '@/components/btn/btn.vue'
	export default {
      
		components: {
      
			btn
		},
	}
script>

② 给组件传值 关键词 props, 然后标注参数类型.

- index.vue 中
<btn color="red">btn>

- 组件中,用 

<template>
	<view class="btn-box" :style="{
        color: color}">
		点击
	view>
template>

<script>
	export default {
      
		props: {
      
			color: {
      
				type: String,
				default: '#000'
			}
		}
	}
script>

③ 页面上拿到组件中的返回值

  1. index.vue 中注册监听事件
<btn color="red" @change="change">btn>
...
methods: {
	change(e) {
		console.log("我是页面的事件,我返回了" + e);
	}
}

  1. 组件中,通过 $emit() 来返回. 接受2个参数, 第一个是 index.vue的监听函数,第二个是参数
methods: {
     
	clickBox() {
     
		console.log('click');
		this.$emit('change', this.color)
	}
}
  1. 如上2步,组件中,通过 $emitthis.color 传给 index.vuechange 事件. 而 change 中的 e 就是组件中返回来的 this.color

④ 组件插槽

  1. index.vue 中,使用 主页中的内容 这样的写法, 希望把文字也插入到组件中.
  2. 在 组价中, 使用插槽 的方式来获取内容.

2-10 语法速通-api与条件编译

文档: https://uniapp.dcloud.io/api/README

① api的一个演示

<script>
	export default {
      
		onLoad() {
      
			console.log(11);
			uni.getSystemInfo({
      
				success(res) {
      
					console.log("success", res);
				},
				fail(err) {
      
					console.log("error", err);
				},
				complete(res) {
      
					console.log("不管成功失败都会返回: ", res);
				}
			})
		},
	}
script>

② 条件编译#ifdef 平台标识符 来让代码在规定的平台里面编译.可以加上 || (或者).

<template>
	<view class="content">
		
		<button>我是一个按钮button>
		
	view>
template>

#ifndef 加了一个 n 表示在后面的平台上面,不显示.

条件编译写法 说明
#ifdef APP-PLUS 需条件编译的代码 #endif 仅出现在 App 平台下的代码
#ifndef H5 需条件编译的代码 #endif 除了 H5 平台,其他平台均存在的代码
ifdef H5 || MP-WEIXIN 需条件编译的代码 #endif 在 H5 平台或微信小程序平台存在的代码(这里只有||, 不可能出现&&, 因为没有交集)

文档 https://uniapp.dcloud.io/platform?id=%e8%b7%a8%e7%ab%af%e5%85%bc%e5%ae%b9

③ 在style中使用 条件编译

<style>
	/* #ifdef H5 */
	...
	/* #endif */
style>

④ 在 style 中, page 表示这个页面

⑤ 尺寸单位 px % rpx rem vh vw

⑥ 引入外部 css 文件 @import '@/static/index.css'

2-11 生命周期概述

文档: https://uniapp.dcloud.io/collocation/frame/lifecycle

① 生命周期的分类

  1. 应用生命周期, 在 App.vue 文件中

    onLaunch 应用初始化完成触发一次, 全局只触发一次
    onShow 应用启动的时候, 或者从后台进入前台会触发
    onHide 应用从前台进入后台触发

  2. 页面生命周期

    onLoad 监听页面加载
    onShow 监听页面显示,每次切换到这个页面,都会执行
    onReady 监听页面初次渲染完成 (如果渲染速度快, 会在页面进入动画完成前触发)
    onHide 监听页面隐藏
    onUnload 监听页面卸载,页面关闭

  3. 组件生命周期

    beforeCreate 在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用
    created 实例创建完成之后立即调用, 挂载阶段还没有开始
    mounted 挂载到实例上去之后调用
    destroyed vue 实例销毁后调用

  4. 大概顺序 App Launch > App Show > component beforeCreate > component created > page onload > page onshow > component mounted > page onready


第3章 千里之行,始于足下 (基础配置)

3-1 uni-app 项目配置

① 微信小程序

微信小程序 -> 设置 -> 安全设置 -> 服务端口 -> 开启

HBuilderX -> 配置 -> 运行配置 -> 把微信开发者工具路径 配置 起来

② app真机,模拟器

连接安卓设备

  • 打开usb调试

连接ios设备

  • 运行 -> 选择 ios 设备

ios 模拟器

  • 打开 xcode
  • 偏好配置 -> 上面倒数第三个 Components -> 选择版本(例如 IOS 12.4 Simulator) 下载 -> 右下角 安装
  • 重启 HBuilderX
  • 运行 -> 模拟器

③ h5, 如果直接运行到浏览器失效的话,可以按照下面操作

  • 设置 -> 运行配置 -> 浏览器运行配置 把相关浏览器路径配置好

3-2 目录结构概述

  • components 自定义组件的目录,自己创建的
  • pages 页面存放目录
  • static 静态文件资源目录
  • unpackage 编译后的文件存放目录
  • utils 公用的工具类,自己创建的
  • common 公用的文件, 自己创建的
  • App.vue 项目启动页
  • main.js 应用入口,绑定全局变量,引用一些第三方库等
  • manifest.json 项目配置
  • page.json 页面配置,页面地址,页面名称等 文档: https://uniapp.dcloud.io/collocation/pages
  • uni.scss scss配置

3-3 配置项目底部选项卡 - tabbar 配置

  • pages.json 中的 globalStyle 中的配置,是所有页面的通用配置.
  • pages.json 中的 pages 下面的配置,可以配置 单独终端(例如 微信小程序,h5,app等)的配置, 如下
{
     
	"pages": [ 
		{
     
			"path": "pages/index/index",
			"style": {
     
				"navigationBarTitleText": "uni-app",
				"app-plus":{
     
					
				},
				"mp-weixin":{
     
					
				},
				"h5":{
     
					
				}
			}
		}
	],
	"globalStyle": {
     
		...
	}
}
  • tabbar 文档 https://uniapp.dcloud.io/collocation/pages?id=tabbar, 写法如下,注意图片的路径写法.
{
     
	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
		...
	],
	"globalStyle": {
     
		...
	},
	"tabBar": {
     
		"color": "#666",
		"selectedColor": "#ff5a5f",
		"borderStyle": "black",
		"list": [{
     
			"pagePath": "pages/index/index",
			"text": "首页",
			// 本地图片, 大小 40kb, 尺寸建议 81*81px
			"iconPath": "static/home.png",
			"selectedIconPath": "static/home-active.png"
		}, {
     
			"pagePath": "pages/about/about",
			"text": "关于",
			// 本地图片, 大小 40kb, 尺寸建议 81*81px
			"iconPath": "static/follow.png",
			"selectedIconPath": "static/follow-active.png"
		}, {
     
			"pagePath": "pages/my/my",
			"text": "首页",
			// 本地图片, 大小 40kb, 尺寸建议 81*81px
			"iconPath": "static/my.png",
			"selectedIconPath": "static/my-active.png"
		}]
	}
}

  • tabbar 会缓存每个页面,所以 onLoad 只会隐藏,不会重新加载.
  • tabbar 中有一个新的生命周期 onTabItemTap(e) , tabbar 点击就会触发, 这个e 返回例如 {index: 0, text: "首页", pagePath: "pages/index/index"}

3-4 在uni-app中如何使用sass

  • 如果第一次使用,需要安装sass插件 scss/sass编译
  • sass 写法