随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本文内容并非完全原创,大多是参考其他文章资料整理所得,感谢每位技术人的开源精神。
本文介绍 Vue3 中如何使用 props 实现组件间通信,即组件间相互传数据。
Vue3 中组件间通信包括:
propsv-model$refpropsv-model$parent$attrsprovider & injectmittPinia| 分类 | 名称 | 版本 |
|---|---|---|
| 操作系统 | Windows | Windows 11 |
| IDE | Visual Studio Code | 1.91.1 |
1> 创建 Vue3 工程,参考:【Vue3】工程创建及目录说明。
2> 删除 src 目录下 assets 和 components 目录。
3> 修改 src 目录下 main.ts。
import { createApp } from 'vue' import App from './App.vue' createApp(App).mount('#app') 4> 定义子组件,接收来自父组件的数据。
子组件
标题:{{ blog.title }} 作者:{{ author }} {{ blog.content }} 注意:需要使用 defineProps 定义接收父组件的哪些 props,如果这里没有定义,则即使父组件有传值,子组件也不能使用。defineProps 的参数是一个数组。
因为用到了 CSS 预处理器,所以需要执行 npm install -D sass 命令安装。
5> 修改 Vue 根组件 src/App.vue,引用以上子组件并向其传值。
父组件
Blog数量:{{ blogs.length }}
可见,父组件向子组件传值只需在子组件标签上添加自定义属性(:blogs="blogs" :author="author")。
6> 执行命令 npm run dev 启动应用,浏览器访问:http://localhost:5173/。
通过颜色可以辨别组件范围,可以看到子组件正确呈现出了来自父组件的数据。
7> 修改 Vue 根组件 src/App.vue,实现父组件接收来自子组件的数据。
父组件
Blog数量:{{ blogs.length }}
浏览数量:{{ readTimes }}
可见,父组件定义了一个方法 syncReadTimes,并将此方法作为子组件的自定义属性(:syncReadTimes="syncReadTimes")传入。
7> 修改子组件,实现向父组件传数据。
子组件
标题:{{ blog.title }} 作者:{{ author }} {{ blog.content }} 首先要在 defineProps 中定义接收来自父组件的 syncReadTimes,然后增加一个按钮 ,每点击一次便调用父组件的 syncReadTimes 并传入数据 1。
8> 浏览器页面(http://localhost:5173/)刷新后点击按钮,会发现父组件中的 浏览数量 显示随点击次数增加。
Vue3 中 props 可以实现父组件与子组件间的双向数据通信:
defineProps 定义接收父组件的哪些数据;defineProps 定义接收此方法引用,通过调用此方法向父组件传数据。