当前位置: 首页 > java >正文

uni-app学习笔记十二-vue3中组件传值(属性传值)

在vue3中,父组件负责采集数据,子组件负责展示数据。那么父组件怎么向子组件中传值呢?

下面简单介绍下实现过程:

1.父组件index.vue中定义属性名和属性值

<template><view><UserInfo username="周芷若" avatar="/static/girl_001.jpeg"></UserInfo><UserInfo username="小昭" avatar="/static/girl_002.jpeg"></UserInfo><UserInfo :username="name" avatar="/static/girl_003.jpeg"></UserInfo></view>
</template><script setup>import {ref} from "vue"const name = ref("赵敏")
</script>

 上面使用了2种方式赋值,一种是在html中直接赋值,另一种,在JS中赋值,html中使用插值表达式接收。

2.子组件user.vue中定义要接收的属性名

<script setup>const props = defineProps(["username","avatar"])
</script>

 3.子组件user.vue在html中使用,注意,属性名要一致。

<template><view class="userInfo"><image :src="avatar" mode="" class="avatar"></image><view class="username">{{username}}</view></view>
</template>

上面src由于不是放地址,而是使用父组件定义的avatar属性的值,要使用v-bind:src来表示,简写为:src。

来看下效果

如果子组件中想生成新值,可以采用下面的方式

<template><view class="userInfo"><image :src="avatar" mode="" class="avatar"></image><view class="username">{{myName}}</view></view>
</template><script setup>const props = defineProps(["username","avatar"])const myName = computed(()=>props.username+"yyds")
</script>

 在上面的defineProps(["username","avatar"])方法中,我们还可以约束传过来值的类型,如果不传时使用默认值:

比如,下面的父组件中,第2个没有传usrname,第3个没有传avatar的值

<view><UserInfo username="周芷若" avatar="/static/girl_001.jpeg"></UserInfo><UserInfo  avatar="/static/girl_002.jpeg"></UserInfo><UserInfo :username="name" ></UserInfo>
</view>

在子组件中可以通过这样使用默认值

<script setup>// const props = defineProps(["username","avatar"])const props = defineProps({username:{type:String,default:"MM"},avatar:{type:String,default:"/static/girl_default.png"}})</script>

来看实际的效果:

拓展:Prop 校验

Vue 组件可以更细致地声明对传入的 props 的校验要求。比如我们上面已经看到过的类型声明,如果传入的值不满足类型要求,Vue 会在浏览器控制台中抛出警告来提醒使用者。这在开发给其他开发者使用的组件时非常有用。

要声明对 props 的校验,你可以向 defineProps() 宏提供一个带有 props 校验选项的对象,例如:

defineProps({// 基础类型检查// (给出 `null` 和 `undefined` 值则会跳过任何类型检查)propA: Number,// 多种可能的类型propB: [String, Number],// 必传,且为 String 类型propC: {type: String,required: true},// 必传但可为 null 的字符串propD: {type: [String, null],required: true},// Number 类型的默认值propE: {type: Number,default: 100},// 对象类型的默认值propF: {type: Object,// 对象或数组的默认值// 必须从一个工厂函数返回。// 该函数接收组件所接收到的原始 prop 作为参数。default(rawProps) {return { message: 'hello' }}},// 自定义类型校验函数// 在 3.4+ 中完整的 props 作为第二个参数传入propG: {validator(value, props) {// The value must match one of these stringsreturn ['success', 'warning', 'danger'].includes(value)}},// 函数类型的默认值propH: {type: Function,// 不像对象或数组的默认,这不是一个// 工厂函数。这会是一个用来作为默认值的函数default() {return 'Default function'}}
})

http://www.xdnf.cn/news/8740.html

相关文章:

  • 解决DeepSeek部署难题:提升效率与稳定性的关键策略
  • 《JavaScript 性能优化:从原理到实战的全面指南》
  • vue3中自定义指令使用
  • Vue3 watch 使用与注意事项
  • 在Mathematica中,使用鸟枪法求解在无穷远处的边值常微分方程
  • 动态规划算法:字符串类问题(2)公共串
  • 简单血条于小怪攻击模板
  • 【Linux】深刻理解OS管理
  • Java 8 Stream操作示例
  • 《仿盒马》app开发技术分享-- 原生地图展示(端云一体)
  • 【Python】1. 基础语法(1)
  • webpack优化方法
  • 学习日记-day15-5.25
  • 云原生安全之HTTP协议:从基础到实战的安全指南
  • JavaSE核心知识点03高级特性03-05(注解)
  • 后经济时代开源链动2+1模式AI智能名片S2B2C商城小程序驱动零售企业转型研究
  • JAVA 项目中 maven pom.xml 和 properties 配置文件、spring 配置文件,以及环境变量的关系
  • 《STL--list的使用及其底层实现》
  • 基于aspnet,微信小程序,mysql数据库,在线微信小程序汽车故障预约系统
  • Win11 系统登入时绑定微软邮箱导致用户名欠缺
  • 【TDengine源码阅读】taosMemoryDbgInit函数
  • 基于MATLAB实现传统谱减法以及两种改进的谱减法(增益函数谱减法、多带谱减法)的语音增强
  • 全面理解类和对象(下)
  • 5.25本日总结
  • 计算机网络-WebSocket/DNS/Cookie/Session/Token/Jwt/Nginx
  • DAY36
  • GitLab-CI简介
  • 单链表的排序
  • Collection集合遍历的三种方法
  • multiprocessing多进程使用案例