在Vue3中父子通讯方式
Vue3父传子(props)
父组件如下:
- <template>
- <div class="about">
- <h1>This is an about page</h1>
- <children :num="num" age="30"></children>
- </div>
- </template>
- <script>
- import children from "../components/children.vue";
- import { ref } from "vue";
- export default {
- setup() {
- let num = ref("《nanchen》");
- return {
- num,
- };
- },
- components: {
- children,
- },
- };
- </script>
子组件如下:
- <template>
- <div>我是子组件 我的父组件值为:{{ yy }}</div>
- </template>
-
- <script>
- import { ref } from "vue";
- export default {
- name: "Vue3appChildren",
- props: {
- num: {
- type: Number,
- },
- },
- setup(props) {
- let yy = ref(props.num);
- return {
- yy,
- };
- },
-
- mounted() {},
-
- methods: {},
- };
- </script>
-
- <style lang="scss" scoped>
- </style>

setup中的参数分别有:
props:值为对象,包含:组件外部传递过来,且组件内部声明接收了的属性。
context:上下文对象
attrs: 值为对象,包含:组件外部传递过来,但没有在props配置中声明的属性, 相当于 this.$attrs。
slots: 收到的插槽内容, 相当于 this.$slots。
emit: 分发自定义事件的函数, 相当于 this.$emit
props中可以接收父组件传递给子组件的参数
Vue3子传父({emit})
父组件:
- <template>
- <div class="about">
- <h1>This is an about page</h1>
- <children :num="num" age="30" @test="showHello"></children>
- </div>
- </template>
- <script>
- import children from "../components/children.vue";
- import { ref } from "vue";
- export default {
- setup() {
- let num = ref("《nanchen》");
- function showHello(value) {
- console.log(value);
- }
- return {
- num,
- showHello,
- };
- },
- components: {
- children,
- },
- };
- </script>
子组件
- <template>
- <div @click="aboutClick">我是子组件 我的父组件值为:{{ yy }}</div>
- </template>
-
- <script>
- import { ref } from "vue";
- export default {
- name: "Vue3appChildren",
- props: {
- num: {
- type: Number,
- },
- },
- setup(props, { emit }) {
- let yy = ref(props.num);
- function aboutClick() {
- emit("test", "你好你好"); // 子传父
- }
- return {
- yy,
- aboutClick,
- };
- },
-
- mounted() {},
-
- methods: {},
- };
- </script>
-
- <style lang="scss" scoped>
- </style>
点击div效果如下:

Vue3插槽
- <children :num="num" age="30" @test="showHello">
- <h1>南辰,Hello</h1>
- </children>
- <template>
- <div @click="aboutClick">我是子组件 我的父组件值为:{{ yy }}</div>
- <slot></slot>
- </template>

具名插槽的写法
- <slot name="aabb"></slot>
- <HelloWorld>
- <template v-slot:aabb>
- <span>NanChen,你好</span>
- </template>
- <!-- <template #aabb>
- <span>NanChen,你好</span>
- </template> -->
- </HelloWorld>
到此这篇关于Vue3父子通讯方式及Vue3插槽的使用方法详解的文章就介绍到这了,更多相关Vue3父子通讯方式及Vue3插槽的使用内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!