【vue3入门】-【21】 组件传递数据

news/2024/10/5 9:27:57

组件传递数据_Props

  • 静态数据传递

组件与组件之间不是完全独立的,而是有交集的,那就是组件与组件之间是可以传递数据的

传递数据的解决方案就是props

app.vue

<template><!--主要要生效Header中的样式,需要删除main.json中默认的main.css样式--><!--不需要再次引入,可以直接使用全局的组件--><!-- <Header />   --><!-- <Main /><Aside /> --><parent />
</template>
<script>
// import Header from './pages/header.vue'
// import Main from './pages/main.vue'
// import Aside from './pages/aside.vue'
import parent from './components/parent.vue'export default {components: {// Header,// Main,// Aside// 在最上层组件中引用父级组件parent}
}
</script>
<style></style>

parent.vue

<template><h3>parent</h3><!--在引用子级组件时可以跟上需要传递的参数值对,用以传递参数,而后被子级组件中的props中的数据接收--><!--允许传递多个参数 空格间隔--><child  title="parent数据"/>
</template>
<script>
import child from "./child.vue"export default {data() {return {}},// 在父级组件中引用子级组件components: {child}
}
</script>
<style></style>

child.vue

<template><h3>child</h3><p>{{ title }}</p>
</template>
<script>export default{data(){return{}},// 接收来自父级引用子级组件时传递的参数props:["title"] 
}
</script>
<style></style>
  • 动态数据传递

可以通过属性绑定的方式,动态传递数据

<template><h3>parent</h3><!--在引用子级组件时可以跟上需要传递的参数值对,用以传递参数,而后被子级组件中的props中的数据接收--><child title="parent数据" /><!--动态传递数据--><child :title="message" />
</template>
<script>
import child from "./child.vue"export default {data() {return {message: "动态传递的数据"}},components: {child}
}
</script>
<style></style>

注意事项

props传递数据,只能从父级传递到子级,不能从子级传向父级

组件传递多种数据类型

通过props传递数据,不仅可以传递字符串类型的数据,还可以是其他类型,例如:数字、对象、数组等。

但实际上任何类型的值都可以作为props的值被传递

app.vue

<template><!--主要要生效Header中的样式,需要删除main.json中默认的main.css样式--><!--不需要再次引入,可以直接使用全局的组件--><!-- <Header />   --><!-- <Main /><Aside /> --><parent />
</template>
<script>
// import Header from './pages/header.vue'
// import Main from './pages/main.vue'
// import Aside from './pages/aside.vue'
import parent from './components/parent.vue'export default {components: {// Header,// Main,// Aside// 在最上层组件中引用父级组件parent}
}
</script>
<style></style>

parent.vue

<template><h3>parent</h3><!--在引用子级组件时可以跟上需要传递的参数值对,用以传递参数,而后被子级组件中的props中的数据接收--><!--动态传递数据是使用属性绑定的方式--><!--可以传递字符、数字、数组、对象等--><child title="parent数据" :msg="message" :age="age" :names="names" :userInfo="user_info" />
</template>
<script>
import child from "./child.vue"export default {data() {return {message: "动态传递的数据",age: 20,names: ["测试1", "测试2", "测试3"],user_info: {"name": "test1","age": 30}}},components: {child}
}
</script>
<style></style>

child.vue

<template><h3>child</h3><p>{{ title }}</p><p>{{ msg }}</p> <!--字符串类型--><p>{{ age }}</p> <!--数字类型传递--><ul><li v-for="(value, index) of names">{{ value }}</li> <!--数组类型传递--></ul><p>{{ userInfo.name }}</p> <!--对象类型--><p>{{ userInfo.age }}</p>
</template>
<script>export default{data(){return{}},// 接收来自父级引用子级组件时传递的参数,需要和父级传递参数名同名props:["title","msg","age","names","userInfo"] 
}
</script>
<style></style>

组件传递props校验

vue组件可以更细致的声明对传入的props校验要求

  • 参数校验
<template><h3>componentB</h3><p>{{ title }}</p>
</template>
<script>
export default {data() {return {}},// 不带参数校验的父级参数接收方式// props: ["title"]// 带参数校验的父级参数接收方式props: {title: {// 传递非规定的类型数据时会存在console报错// type: Number// 也可以标记多种类型,只要满足其中一种就可以type: [String, Number, Array, Object]}}
}
</script>

参数类型传递错误时,存在console告警

image

  • 默认值校验
<template><h3>componentB</h3><p>{{ title }}</p><p>{{ age }}</p><p v-for="(value, index) of names">{{ value }}</p>
</template>
<script>
export default {data() {return {}},// 不带参数校验的传递方式// props: ["title"]// 带参数校验的传递方式props: {title: {// 传递非规定的类型数据时会存在console报错// type: String// 也可以标记多种类型,只要满足其中一种就可以type: [String, Number, Array, Object],},age: {type: Number,// 不传时,显示默认值,传递后显示传递的值// 注意:数字和字符串可以直接default,但是如果是数字和对象,必须通过工厂函数返回默认值default: 20},names: {type: Array,// 对于数组和对象类型的值,需要增加函数返回,不能直接返回default(){return ["空"]}}}
}
</script>
  • 必选项
<template><h3>componentB</h3><p>{{ title }}</p>
</template>
<script>
export default {data() {return {}},// 不带参数校验的传递方式// props: ["title"]// 带参数校验的传递方式props: {title: {// 传递非规定的类型数据时会存在console报错// type: String// 也可以标记多种类型,只要满足其中一种就可以type: [String, Number, Array, Object],// 必填项,如果父级没有传递对应参数时,console会存在告警required: true}}}

image

注意:props接收的数据是只读的,修改时会报错

<template><h3>componentB</h3><p>{{ title }}</p><button @click="updatePropParam">修改props参数</button>
</template>
<script>
export default {data() {return {}},// 不带参数校验的传递方式// props: ["title"]// 带参数校验的传递方式props: {title: {// 传递非规定的类型数据时会存在console报错// type: String// 也可以标记多种类型,只要满足其中一种就可以type: [String, Number, Array, Object],required: true},},methods: {updatePropParam() {console.log(this.title);// 尝试修改props里面接口的参数数据时会存在异常报错,不允许修改父元素传递过来的数据this.title="新数据"}}
}
</script>

image

以上内容出自
【【2023最新版】Vue3从入门到精通,零基础小白也能听得懂,写得出,web前端快速入门教程】 https://www.bilibili.com/video/BV1Rs4y127j8/?share_source=copy_web&vd_source=94c3d5330a46438059359e8dd2494fe9

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/28741.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

走过人生的复平面:个人信息学奥林匹克生涯回顾

从最开始到一切的结局,完整详细的个人回忆录。走过人生的复平面—— 个人信息学奥林匹克生涯回顾写在前面:一个简单的介绍 信息学奥林匹克竞赛,即 Olympiad in Informatics,AKA OI,而学习 OI 的人则自称为 OIer。通常来讲,一个中国大陆 OIer 的一个赛季是,参加 10 月份的…

如何批量重命名,把文件(夹)名的内容位置调整(前后移动)

首先,需要用到的这个工具:度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z 情况是这样,把“中文[数字]”的名称,改为"中文 - 数字"打开工具,切换到 文件批量复制 模块,快捷键Ctrl+5找到右下角的“重命名”按钮,打开把那些文件拖入进去,也可以用右侧的导入按钮(如…

vue的template中访问不到变量

描述 源代码 <h4>&emsp;&emsp;{{hitokoto.hitokoto}}</h4>报错如下。解决 普通字符和变量之间加个空格就行了 <h4>&emsp;&emsp; {{hitokoto.hitokoto}}</h4>

Ryght 在 Hugging Face 专家助力下赋能医疗保健和生命科学之旅

本文是 Ryght 团队的客座博文。Ryght 是何方神圣? Ryght 的使命是构建一个专为医疗保健和生命科学领域量身定制的企业级生成式人工智能平台。最近,公司正式公开了 Ryght 预览版 平台。 当前,生命科学公司不断地从各种不同来源 (实验室数据、电子病历、基因组学、保险索赔、药…

如何搜索空文件夹_名称为(纯或含)中/英/数/符

首先,需要用到的这个工具:度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z 打开工具,切换到批量文件复制版块,快捷键Ctrl+5点击右侧的搜索添加设定要搜索的范围、指定为文件夹、包括子目录,勾选详细条件在过滤条件里,勾选“按命名”,“含有内容”,“仅文件夹名”,“任意”…

认识linux内核(linux内核的作用)

目录认识linux内核Linux内核实现策略哪些地方用到了内核机制?Linux进程Linux内核源代码的目录结构Linux内核体系结构(就是Linux系统是怎么构成的)Linux体系结构和内核结构区别 认识linux内核 1.从技术层面讲,内核是硬件与软件之间的一个中间层。作用是将应用层序的请求传递…

软件设计师:结构化开发方法

模块化模块独立 软件模块应尽量做到高内聚、低耦合,提高模块的独立性 耦合性无直接耦合:没有直接关系 数据耦合:传递简单的数据值 标记耦合:传递数据结构 控制耦合:传递控制变量 外部耦合:软件之外的环境联结 公共耦合:公共数据环境 内容耦合:通过非正常入口/直接访问内…

基于表面法线法的二维人脸图构建三维人脸模型matlab仿真

1.算法运行效果图预览2.算法运行软件版本 matlab2022a3.算法理论概述 二维人脸图像获取表面法线首先,我们需要从二维灰度或者彩色人脸图像中估计表面法线。通常这一过程包括以下几个步骤:人脸检测与对齐:确保人脸图像被准确检测并进行标准化对齐,以便后续处理。深度信息估计…