美文网首页
《图解Vue3.0》- 第15节 组件通信

《图解Vue3.0》- 第15节 组件通信

作者: 张中华 | 来源:发表于2021-07-08 06:28 被阅读0次

父传子(父->子)

props

在组件数据管理中,我们知道,可以利用porps将父组件数据传递给子组件。

示例

Generator1.vue

<template>
    <h1> 一代 </h1>
    <Generator2 info="我是一代传过去的"></Generator2>
</template>

<script>
import { defineComponent } from '@vue/composition-api'
import Generator2 from '@/components/数据传递/Generator2';

export default defineComponent({
    setup() {
        
    },
    components: { Generator2 }
})
</script>

Generator2.vue

<template>
    <div>
        <h1>二代</h1>
        <span>来自一代的信息: {{ info }}</span>
    </div>
</template>

<script>
import { defineComponent } from '@vue/composition-api'

export default defineComponent({
    setup() {},
    props: {
        info: {
            type: String
        }
    },
    data() {},
})
</script>

slot

slot也算是一种从父组件向子组件传递消息的一种方式。

示例

Generator1.vue

<template>
    <h1> 一代 </h1>
    <Generator2 info="我是一代传过去的">
        <template v-slot:content>
            <h1>slot</h1>
            <div>我是一代传过去的内容</div>
        </template>
    </Generator2>
</template>

<script>
import { defineComponent } from '@vue/composition-api'
import Generator2 from '@/components/数据传递/Generator2';

export default defineComponent({
    setup() {
        
    },
    components: { Generator2 }
})
</script>

Generator2.vue

<template>
    <div>
        <h1>二代</h1>
        <span>来自一代的信息: {{ info }}</span>
        <slot name="content"></slot>
    </div>
</template>

<script>
import { defineComponent } from '@vue/composition-api'

export default defineComponent({
    setup() {},
    props: {
        info: {
            type: String
        }
    },
    data() {},
})
</script>

祖先传后代

有时可能从上至下有多代传递,那么自然可以使用props一代一代传下去,也可以使用provider/inject。

示例

Generator1.vue

<template>
    <h1> 一代 </h1>
    <Generator2 info="我是一代传过去的">
        <template v-slot:content>
            <h1>slot</h1>
            <div>我是一代传过去的内容</div>
        </template>
    </Generator2>
</template>

<script>
import { defineComponent } from '@vue/composition-api'
import Generator2 from '@/components/数据传递/Generator2';

export default defineComponent({
    setup() {
        
    },
    provide: {
        message: '祖传宝贝, 务必收好!'
    },
    components: { Generator2 }
})
</script>

Generator2.vue

<template>
    <div>
        <h1>二代</h1>
        <span>来自一代的信息: {{ info }}</span>
        <slot name="content"></slot>
        <Generator3></Generator3>
    </div>
</template>

<script>
import { defineComponent } from '@vue/composition-api';
import Generator3 from '@/components/数据传递/Generator3';

export default defineComponent({
    setup() {},
    components: { Generator3 },
    props: {
        info: {
            type: String
        }
    },
    data() {},
})
</script>

Generator3.vue

<template>
    <div>
        <h1>三代</h1>
        <span>来自一代的信息: {{ message }}</span>
    </div>
</template>

<script>
import { defineComponent } from '@vue/composition-api'

export default defineComponent({
    setup() {},
    data() {},
    inject: ['message'],
})
</script>

子传父

在上面的例子中,数据流都是自上而下的,利用on/$emit()事件的方式,也可以实现在下而上的数据传递。

示例

Generator4.vue

<template>
    <h1> 四代 </h1>
    <div>
        <span>来自子代的内容: {{ childContent }}</span>
    </div>
    <Generator5 v-on:changeContent="change"></Generator5>
</template>

<script>
import { defineComponent } from '@vue/composition-api'
import Generator5 from '@/components/数据传递/Generator5';

export default defineComponent({
    setup() {
        
    },
    components: { Generator5 },
    data() {
        return {
            childContent: '',
        }
    },
    methods: {
        change(val) {
            this.childContent = val.content;
        },
    }
})
</script>

Generator5.vue

<template>
    <h1> 五代 </h1>
    <button @click="click">按钮</button>
</template>

<script>
import { defineComponent } from '@vue/composition-api'

export default defineComponent({
    setup() {},
    methods: {
        click() {
            this.$emit('changeContent', {content: '我是子组件传递给父组件的'});
        }
    }
})
</script>

总结

除了上面的一些方法,关于数据的处理其实常用的还有vuex,由于之后还会详细学习,便不在这里做介绍了。下面的bus也会在之后单独讲解,也不在此做过多的介绍,就是利用监听者模式实现的一种传递数据的方式。还有就是利用选择的方式:parent /children与 ref,不是主动传递的。

向下传递

props, provider/inject, slot, vuex, bus

向上传递

on/emit, vuex, bus,

无关组件传递

vuex,bus

相关文章

  • 《图解Vue3.0》- 第15节 组件通信

    父传子(父->子) props 在组件数据管理中,我们知道,可以利用porps将父组件数据传递给子组件。 示例 G...

  • 2.vuex-part-1

    1.Vuex 是什么? 图解: 组件通信在使用Vue进行组件化开发这个。组件通信是一个十分重要的部分。应用在组件化...

  • 《图解Vue3.0》- 第8节 - 组件样式

    组件的样式一般就是绑定到class或者绑定到style。这两种方式又分别可以使用对象语法或者数组语法。 class...

  • 《图解Vue3.0》- 第14节 动态组件和异步组件

    动态组件 在内置指令中,有一个指令is,使用它可以实现动态组件。使用动态组件方式:

    vue中的组件通信

    一、组件通信(组件传值) 1.1父子组件通信 1.2子父组件通信 1.3非父子组件通信(兄弟组件通信)

  • 组件通信

    组件通信分为几种: 父组件给子组件通信 子组件给父组件通信 兄弟组件通信 1.父组件给子组件通信 法一...

  • 组件通信

    组件关系 组件关系可以分为父子组件通信、兄弟组件通信、跨级组件通信。 父子组件通信 1. 子组件使用 $emit(...

  • react之组件通信

    需要组件之进行通信的几种情况: 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 ...

  • React组件通信的几种方式

    需要组件之进行通信的几种情况 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 1...

  • React中组件通信的几种方式

    需要组件之进行通信的几种情况 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 1...

网友评论

      本文标题:《图解Vue3.0》- 第15节 组件通信

      本文链接:https://www.haomeiwen.com/subject/domaultx.html