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

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'}}
})

相关文章:

  • Redis之金字塔模型分层架构
  • [医学影像 AI] 使用 PyTorch 和 MedicalZooPytorch 实现 3D 医学影像分割
  • Linux Kernel调试:强大的printk(二)
  • 两个mysql的maven依赖要用哪个?
  • 高级特性实战:死信队列、延迟队列与优先级队列(一)
  • 基于MATLAB编程针对NCV检测数据去漂移任务的完整解决方案
  • [特殊字符] Function Calling 技术详解与 Qwen 模型实践指南
  • 软考 系统架构设计师系列知识点之杂项集萃(72)
  • Oracle控制文件损坏恢复方案
  • RabbitMQ 可靠性保障:消息确认与持久化机制(一)
  • Android应用中设置非系统默认语言(使用Kotlin)
  • ChatGPT+知网,AI如何辅助真实科研写作流程?
  • JavaEE 网络编程套接字详解与实战示例
  • 永磁同步电机控制算法--IP调节器
  • 文章代码|皮层/表皮特异性转录因子 bZIP89 的自然变异决定了玉米侧根发育和抗旱能力
  • 【监控】Node Exporter 介绍及应用
  • QListWidgetItem的函数介绍
  • webpack面试问题
  • Maven基础篇
  • 使用Vue3制作一款个性化上传组件
  • 克隆网站怎么做后台/域名注册新网
  • grace 7 wordpress/北京seo优化多少钱
  • 刚做的网站怎么知道有没有潜在的/常用的网络推广方法有哪些
  • 成都建设信息网官网/徐州seo顾问
  • 邯郸网站建设费用/发帖效果好的网站
  • h5网站显示的图标怎么做的/搜狗网站收录