uni 入门

目录

1.页面的生命周期函数

a.常用函数

b.执行顺序

 2.路由

a.路由配置

pages.json文件示例

b.TabBar

c.路由跳转

d.路由传参

Url传参

uni.$emit传参

e.路由守卫-调用函数

f.路由守卫-拦截器

3.css

a.选择器

b.内置css变量


本文使用的vue3版本

1.页面的生命周期函数

页面的生命周期函数是在vue的生命周期函数基础上进行扩充的合集,组件的生命周期函数还是vue的生命周期函数。

a.常用函数

只在此罗列了,常用的函数,详见生命周期函数。以下函数全平台通用。

onLoad监听页面加载,其参数为上个页面传递的数据,参数类型为 Object(用于页面传参),参考示例
onShow监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面
onReady监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发。如果想执行获取页面高度等操作,在此函数内调用。
onHide监听页面隐藏
onUnload监听页面卸载

b.执行顺序

 2.路由

uni-app的路由与vue-router路由完全不同,uni-app的页面路由是在pages.json中进行配置,在pages.json配置页面路由的同时还可以配置上方导航栏样式。同时到现在为止,我没有发现uni官方提供的路由守卫的写法,如果有人发现了官方的写法请在评论区赐教一下,感谢(✪ω✪)。

a.路由配置

 通过HBuilderX在pages目录下面右键后点击新建页面即可创建一个页面,同时就会把路由信息自动创建到pages.json文件当中。

pages.json文件示例

 上图中pages就是文件的数组,数组中的第一个元素就是系统的启动页面。详细配置请参考配置项

b.TabBar

tabbar的路由也是在pages.json中配置的。

c.路由跳转

uni.navigateTo保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面。只能打开非 tabBar 页面。
uni.redirectTo关闭当前页面,跳转到应用内的某个页面。只能打开非 tabBar 页面。
uni.reLaunch关闭所有页面,打开到应用内的某个页面。可以打开任意页面。
uni.switchTab跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。
uni.navigateBack关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层。

d.路由传参

uni-app的路由传参是直接将参数放在url进行传输,在跳转后的页面中再onLoad钩子函数中获取。

Url传参

A页面跳转到B页面

A页面

function goToBPage(){
		uni.navigateTo({
			url:'/pages/message/message?name=test&age=18'
		})
	}

B页面

	import {
		onLoad
	} from '@dcloudio/uni-app'
	onLoad(option=>{
		console.log(option)
	})

输出

uni.$emit传参

如果觉得参数暴露在url中可以使用uni.$emit的方式进行传输(为啥不用事件通道,因为vue3下面不好用)

写了一个帮助类navigateEvent.js

// 此文件用于页面传参

/**
 * 给新打开的页面发送参数
 * @param {*} eventName 事件名称 
 * @param {*} data 数据
 */
export function sendToNewPage(eventName, data) {
	console.log(eventName + '-handshake-in')
	// 原来的页面等待新打开的页面发起握手
	uni.$once(eventName + '-handshake', () => {
		console.log(eventName + '-handshake')
		// 握手成功后发送信息
		uni.$emit(eventName, data)
	})
}

// 定时器
let _timer

/**
 * 新页面接受参数 
 * @param {*} eventName 事件名称 
 * @param {*} callBack 处理事件的回调
 */
export function getDataOnNewPage(eventName, callBack) {
	console.log('getDataOnNewPage')
	uni.$once(eventName, data => {
		// 防抖
		if (_timer) {
			clearTimeout(_timer)
		}
		_timer = setTimeout(() => {
			callBack(data)
			_timer = null
		}, 100)
	})
	uni.$emit(eventName + '-handshake')
}

A页面

	function goToBPage() {
		sendToNewPage('AToB', {
			name: 'test',
			age: 18
		})
		uni.navigateTo({
			url: '/pages/message/message'
		})
	}

B页面

<script setup>
	import {
		onLoad
	} from '@dcloudio/uni-app'
	import {
		getDataOnNewPage
	} from '@/utils/navigateEvent.js'

	onLoad(() => {
		getDataOnNewPage('AToB', data => {
			console.log(data)
		})
	})
</script>

e.路由守卫-调用函数

通过调用函数的方式拉达到路由的拦截

帮助类

/**
 * 路由守卫 哪里需要判断就加在哪里,不引入的就是白名单
 */
export function beforeRouterEach() {
	const token = uni.getStorageSync('token')
	if (token) {
		return true
	} else {
		uni.redirectTo({
			url: '/pages/login/login'
		})
		return false
	}
}

首页

import {
		beforeRouterEach
	} from '@/utils/navigateEvent.js'

	onShow(() => {
		beforeRouterEach()
	})

f.路由守卫-拦截器

请看这篇博客 https://blog.csdn.net/qq_37906822/article/details/122704299icon-default.png?t=M666https://blog.csdn.net/qq_37906822/article/details/122704299

拦截器的方式只能拦截以下四种没法实现从地址栏改变url的变化的监听

'navigateTo', 'redirectTo', 'reLaunch', 'switchTab'

3.css

a.选择器

目前支持的选择器有:

选择器样例样例描述
.class.intro选择所有拥有 class="intro" 的组件
#id#firstname选择拥有 id="firstname" 的组件
elementview选择所有 view 组件
element, elementview, checkbox选择所有文档的 view 组件和所有的 checkbox 组件
::afterview::after在 view 组件后边插入内容,仅 vue 页面生效
::beforeview::before在 view 组件前边插入内容,仅 vue 页面生效

注意: 

  • 在 uni-app 中不能使用 * 选择器。
  • 微信小程序自定义组件中仅支持 class 选择器
  • page 相当于 body 节点

b.内置css变量

CSS 变量描述App小程序H5
--status-bar-height系统状态栏高度系统状态栏高度25px0
--window-top内容区域距离顶部的距离00NavigationBar 的高度
--window-bottom内容区域距离底部的距离00TabBar 的高度

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值