vue3+uni——watch监听props中的数据(组件参数接收与传递defineProps、defineEmits)

2023-11-20

案例说明

A页面引用的子组件B

A页面

<template>
	<view>
	    //引用组件
		<serviceOrder @change="change" :list="list" :current="type"></serviceOrder>
	</view>
</template>

<script setup>
	import serviceOrder from '@/components/serviceOrder/serviceOrder.vue'
	const type = ref(0)
	// 切换tab
	function change(e) {
		type.value = e
	}
</script>

B子组件

<template>
	<view>
		<view class="orderTab">
			<block v-for="(item,index) in tabs" :key="index">
				<view class="tabItem" @click="change(index)" :class="index == current2?'active':''">
					{{item.name}}
				</view>
			</block>
		</view>
	</view>
</template>

<script setup>
	import {
		ref,
		watch
	} from 'vue'
	// 接收值
	const props = defineProps({
		current: {
			type: Number,
			default: 0
		}
	})
	// 接收方法
	const emit = defineEmits(['change'])
	const tabs = ref([{
		name: '全部',
		type: 0
	}, {
		name: '待付款',
		type: 1
	}, {
		name: '待服务',
		type: 2
	}, {
		name: '已完成',
		type: 3
	}])
	const current2 = ref(0) //默认索引为0的样式
	watch(
		() => props.current,
		(newVal, oldVal) => {
			current2.value = newVal
		}
	)
	// 切换
	const change = (index) => {
		current2.value = index // 样式处理
		emit('change', current2.value)//传递方法
	}
</script>

<style lang="scss" scoped>
.orderTab {
	display: flex;
	justify-content: space-between;
	align-items: center;
	height: 88rpx;
	background: #FFFFFF;
	padding: 0 29rpx;

	.tabItem {
		font-size: 28rpx;
		color: #636363;
	}

	.active {
		position: relative;
	}

	.active:after {
		content: '';
		position: absolute;
		left: 50%;
		bottom: -10rpx;
		transform: translateX(-50%);
		width: 40rpx;
		height: 5rpx;
		background: #2CB6DB;
		border-radius: 50rpx;
	}
}
</style>

在这里插入图片描述

在此案例中,子组件中 用来通过判断来显示蓝色下划线样式的 变量为什么没有用current而是用的current2,你会发现组件接收的值不能在下面方法中二次处理使用,所以这个又定义了一个变量current2,改怎么写就怎么写样式判断。之后tab点击的事件暴露出去,在A页面里面使用。
当A页面current属性值被修改的时候,假如C页面中点击某个待服务跳转到A页面并传了参数2,这时候A页面接受该参数2,并将type的类型赋值为2,之后为了对应的效果显示,需要告诉B组件,目前应该是处于谁被选中的状态【下图】。所有就有了:current = "type"
在这里插入图片描述
子组件使用 defineProps接收传过来的参数2,watch一直监听这个变量,一旦这个变量有变化,那么执行操作,current2等于最新的2,这样“待服务”下面就有蓝条条了。

watch(
	() => props.current,
	(newVal, oldVal) => {
		current2.value = newVal
	}
)

问题

如果遇到了ref、watch is not defined等报错,
vue3的setup里面直接使用watch会报错,需要使用import引入之后才可使用。

import { ref,	watch	} from 'vue'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue3+uni——watch监听props中的数据(组件参数接收与传递defineProps、defineEmits) 的相关文章

随机推荐

  • 为何在新建STM工程中全局声明两个宏

    在uVision中新建STM32工程后 需要从STM32标准库中拷贝标准外设驱动到自己的工程目录中 此时需要在工程设置 gt C C 选项卡下的Define文本框中键入这两个全局宏定义 STM32F40 41xxx USE STDPERIP
  • 二叉树的一些练习题

    前言 二叉树的简单题目 通过画栈帧图去理解过程 画一画 走一走递归过程 理解会更加深刻 二叉树练习题 前言 二叉树的创建 二叉树先序遍历创建 PreCreat 二叉树层次创建 LevelCreat 二叉树的销毁 BinaryTreeDest
  • 二分法查找数组元素

    二分法查找元素时可以节省下极高的效率 如果有2的32次方个元素 依次查找需要查找2的32次方次 然而二分查找最多只用查找32次 程序执行的时间极大的缩短 二分法查找元素 include
  • nginx中location里面的try_files配置导致Vue设置history模式下的请求丢失参数

    nginx中location里面的try files配置导致vue设置history模式下的请求丢失参数 背景描述 在一次生产环境中 vue使用history模式在访问地址的参数会丢失 地址栏也会变成没有参数的地址 并且请求会发生301重定
  • 快速排序算法详解(原理,时间复杂度,实现代码)

    快速排序算法详解 原理 实现和时间复杂度 快速排序是对冒泡排序的一种改进 由 C A R Hoare Charles Antony Richard Hoare 东尼 霍尔 在 1962 年提出 快速排序的基本思想是 通过一趟排序将要排序的数
  • sql 字段求和_VBA+SQL-常用函数

    SQL语句中的一些简单计算函数 如max函数 SELECT MAX 列字段 AS 别名1 FROM 工作表名 如AVG函数 SELECT AVG 列字段 AS 别名1 FROM 工作表名 使用实例说明 源数据 查询内容 对英语成绩最高分 对
  • 【Java基础】day13

    day13 一 Spring Bean 生命周期是怎样的 详细过程分为以下几个步骤 初始化 Bean 容器通过获取 BeanDefinition 中的信息进行实例化 这一步仅仅是简单的实例化 并没有进行依赖注入 实例化的对象被包装在 Bea
  • 脚手架搭建react项目遇到的问题?

    一 配置proxy代理 配置代理其实很简单 但是理解其中我还不是太懂 贴一下代码看一下配置吧 说一下我遇见的问题 因为以前用webpack配置需要在config里配置devServer 网查脚手架搭建的项目不用这么麻烦 直接package
  • 【100%通过率 】【华为OD机试c++/python】日志限流【2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 某软件系统会在运行过程中持续产生日志 系统每天运行N单位时间 运行期间每单位时间产生的日志条数保行在数组 records中 records i
  • 小程序中的callback使用,及面临的风险

    1 前言 在项目开发中 初步逻辑是 获取用户的openid 2 使用openid去查询用户数据表中是否有这个用户 3 如果没有这个openid的用户 非key字段 新建一条用户数据 但在实际的操作者 发现数据库会存在如下图的情况 数据库中o
  • 「Python 面试」第五次更新

    1 说一下 char varchar text 的区别 这里先介绍一下数据库的概念 数据库是一种数据结构 内含多种算法 帮助我们将数据以最优化的方式存储在计算机中 也可以帮助我们快速找到存储的数据 数据最终存储在计算机中都是以 二进制 的方
  • error: invalid operands to binary % (have ‘double‘ and ‘int‘)取模mod %

    此处出现错误 因为 不可以用于浮点型 double float类型 只能用于整型 int类型 可以强制类型转换 将浮点型强制转换为整型 解决此问题 double b int floor x 10 10 double c int floor
  • 系统架构设计师-计算机网络

    目录 一 计算机网络技术概述 1 网络概述 2 网络有关指标 3 网络分类 4 5G技术 二 组网技术 1 交换技术 2 基本交换原理 三 TCP IP协议簇 1 DHCP 2 DNS 四 网络规划与设计 一 计算机网络技术概述 1 网络概
  • Unity动画系统详解

    目录 动画编辑器 编辑器面板 动画复用 前言 人形重定向动画 Humanoid 通用动画 Generic 旧版本动画 Legacy 动画控制器 系统状态 切换条件 状态机脚本 IK动画 反向动力学 BlendTree 混合树 Animato
  • iis服务器网站加速,iis6配置gzip给网页减肥加快网页加载速度的方法

    gzip是一款网页压缩组件 开启了之后可以大大压缩网站文件 达到加快浏览速度的目的 尤其国外vps或者较大的网页 效果极为明显 linux vps或服务器 我们在配置环境的时候一般面板都集成安装了 会自动开启 但是还是有很多朋友喜欢用win
  • git 建立分支仓库

    Git 命令版本 查看本地分支及追踪 找一个文件夹目录 clone 仓库 Git branch vv 查看所有分支 Git branch a 查看本地分支 git branch 查看远程分支 git branch r 创建本地分支dev g
  • 对Unity3D 静态批处理和动态批处理的理解

    Draw Call就是CPU调用图像编程接口 像OpenGL或者 DirectX 简单来说 Draw Call就是由CPU发起的一个命令 添加到一个命令缓冲区 当GPU完成了上一次的渲染任务之后 会从命令缓冲区的命令队列中再取出一个并执行
  • hive有没有python api_python 访问hive

    pip install impyla 0 14 1pip install pure sasl 0 5 1pip install thriftpy 0 3 9pip install thrift sasl 0 2 1pip install t
  • 君正周生雷:MIPS架构授权促成本降至ARM 1/2

    转自 http laoyaoba com forums viewthread php tid 1525231 君正周生雷 MIPS架构授权促成本降至ARM 1 2 12月24日消息 腾讯科技日前走访了国内CPU企业君正集成电路有限公司 君正
  • vue3+uni——watch监听props中的数据(组件参数接收与传递defineProps、defineEmits)

    案例说明 A页面引用的子组件B A页面