1. 生命周期
uniapp中组件生命周期函数和页面生命周期函数的执行顺序
- 不包含组件的页面
onLoad > onShow > onReady
<template>
<view class="">
哈哈家具家电
<scroll-view scroll-y="true" ref="scroll">
<view></view>
</scroll-view>
</view>
</template>
<script setup>
import { ref } from "vue";
import { onLoad, onReady, onShow } from "@dcloudio/uni-app";
const scroll = ref(null);
/*
onLoad 先执行,执行onShow,再执行onReady
*/
// onLoad 用于接收上一个页面的参数
onLoad((e) => {
console.log("onLoad生命周期");
console.log(e);
});
// 监听页面显示,页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面
onShow(() => {
console.log("onShow生命周期");
});
// 类似于onMounted。DOM已经渲染完成,可以操作节点
onReady(() => {
console.log("ref", scroll.value);
});
</script>
<style lang="scss" scoped>
</style>
- 包含组件的页面
onLoad > onShow > onBeforeMount > onReady > onMounted
- 应用生命周期(仅可在App.vue中监听)
-
1.onLaunch :当 uni-app 初始化完成时触发(全局只触发一次) App.vue里的onLaunch中option作用:获取用户进入小程序或退出小程序的场景值
-
2.onShow :当 uni-app 启动,或从后台进入前台显示 //监听用户进入小程序
-
3.onHide :当 uni-app 从前台进入后台 //监听用户离开小程序
-
4.onError :当 uni-app 报错时触发
-
5.onUniNViewMessage :对 nvue 页面发送的数据进行监听
页面生命周期(在页面中添加)
-
1.onLoad (监听页面加载)
-
2.onShow (监听页面显示)
-
3.onReady (监听页面初次渲染完成)
-
4.onHide (监听页面隐藏)
-
5.onUnload :监听页面卸载
-
6.onResize :监听窗口尺寸变化
-
7.onPullDownRefresh :监听用户下拉动作,一般用于下拉刷新
当页面中需要用到下拉刷新功能时,打开pages.json,在"globalStyle"里设置"enablePullDownRefresh":true
此时所有页面都可以完成下拉刷新功能 如果想在单个页面中不执行刷新功能:在pages.json里单个页面上添加
如果想在单个页面中执行刷新功能:在pages.json里单个页面上添加
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "首页",
"enablePullDownRefresh":true
}
},
"enablePullDownRefresh":true
-
8.onReachBottom :页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据
-
9.onTabItemTap :点击 tabBar 时触发
-
10.onShareAppMessage :用户点击右上角分享 可以在转发时设置转发标题,路径和图片
-
11.onPageScroll :监听页面滚动
-
12.onNavigationBarButtonTap :监听原生标题栏按钮点击事件
-
13.onBackPress :监听页面返回
-
14.onNavigationBarSearchInputChanged :监听原生标题栏搜索输入框输入内容变化事件
-
15.onNavigationBarSearchInputConfirmed :监听原生标题栏搜索输入框搜索事件,用户点击软键盘上的“搜索”按钮时触发
-
16.onNavigationBarSearchInputClicked :监听原生标题栏搜索输入框点击事件
onLoad() {
console.log('页面加载')
},
onShow() {
console.log('页面显示')
},
onReady(){
console.log('页面初次显示')
},
onHide() {
console.log('页面隐藏')
},
onUnload() {
console.log('页面卸载')
},
onBackPress(){
console.log('页面返回...')
},
onShareAppMessage() {
console.log('分享!')
},
onReachBottom() {
console.log('下拉加载...')
},
onPageScroll(){
console.log('页面滚动...')
},
onPullDownRefresh() {
console.log('上拉刷新...')
uni.stopPullDownRefresh();
},
2.新建项目和页面
- 选择文件,然后选择项目,直接创建基本项目
2.项目文件介绍
─main.js Vue初始化入口文件
├─App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期
├─pages.json 配置页面路由、导航条、选项卡等页面类信息,详见
├─manifest.json 配置应用名称、appid、logo、版本等打包信息,详见
├─AndroidManifest.xml Android原生应用清单文件 详见
├─Info.plist iOS原生应用配置文件 详见
└─uni.scss 内置的常用样式变量
详细配置,看这个链接
3.项目运行
4. 模版简介
- 新建页面
- 路由配置项
3.路由跳转-navigator页面跳转。
3.1 navigator页面跳转
该组件类似HTML中的<a>
组件,但只能跳转本地页面。目标页面必须在pages.json中注册。
<navigator url="/pages/demo1/demo1">跳转到demo1</navigator>
<navigator url="/pages/demo6/demo6?name=王五&&age=18">跳转到demo6并传递参数</navigator>
// 监听页面加载,该钩子被调用时,响应式数据、计算属性、方法、侦听器、props、slots 已设置完成,其参数为上个页面传递的数据,参数类型为 Object(用于页面传参)
onLoad((e) => {
console.log("onLoad生命周期");
console.log(e);
});
onLoad onShow onReady
各个阶段与Vue进行对比
3.2 API方式也可以实现页面跳转
一、uni.navigateTo(object) 保留当前页面,跳转到指定非tabBar页面,如:
uni.navigateTo({
url:'/pages/demo1/demo1',
})
二、uni.redirectTo(object) 关闭当前页面,跳转到指定非tabBar页面,如:
uni.redirectTo({
url:'/pages/demo1/demo1'
})
三、uni.reLaunch(object) 关闭所有页面,打开任意指定页面,如:
uni.reLaunch({
url:'/pages/demo1/demo1',
})
四、uni.switchTab(object) 关闭所有非tabBar页面,跳转到tabBar页面,如:
uni.switchTab({
url:'/pages/demo2/demo2'
})
五、uni.navigateBack(object) 回退指定数量个页面,默认回退上一级,如:
uni.navigateBack()
可以通过传递对象的delta属性指定回退页面的个数,如:
// 回退两页
uni.navigateBack({
delta:2
})
六、getCurrentPages() 获取当前所有页面的页面栈,第一个为首页,最后一个为当前页面
const pageStack = getCurrentPages()
4. 文件介绍
5. easycom组件规范
只要组件安装在项目的components目录下或uni_modules
目录下,并符合components/组件名称/组件名称.(vue|uvue)
目录结构(注意:当同时存在vue和uvue时,uni-app 项目优先使用 vue 文件,而uni-app x 项目优先使用 uvue 文件,详情)。就可以不用引用、注册,直接在页面中使用。
6.tabber配置
"tabBar": {
"color": "#F0AD4E",
"selectedColor": "#3cc51f",
"borderStyle": "black",
"backgroundColor": "#F8F8F8",
"list": [{
"pagePath": "pages/index/index",
"iconPath": "static/logo.png",
"selectedIconPath": "static/logo.png",
"text": "首页"
},
{
"pagePath": "pages/classify/classify",
"iconPath": "static/logo.png",
"selectedIconPath": "static/logo.png",
"text": "分类"
},
{
"pagePath": "pages/user/user",
"iconPath": "static/logo.png",
"selectedIconPath": "static/logo.png",
"text": "个人中心"
}
]
},
7.static
static中的图片无论有没有用到都会打包到里面去。
静态资源编译规则
-
项目
static
目录下的静态资源,会被直接拷贝到编译后目录的static
目录下。 -
非
static
目录下的静态资源在vue3
下,被引用的资源会编译到assets
目录下,并重新命名为原始名称+内容hash
,如:logo.png
会编译为类似logo.cfd8fa94.png
的名称。如果该静态资源未被引用,则不会被编译器处理。
8.父组件调用子组件的方法
注意:
clickButton
函数的定义移到 defineExpose
之前。