组件通讯的方式有哪些

博客 分享
0 152
张三
张三 2022-06-25 17:01:00
悬赏:0 积分 收藏

组件通讯的方式有哪些

  • props传递数据

步骤:

  • 首先,在子组件中声明props选项

  • 其次,在子组件中使用v-bind指令动态绑定属性,通过插值表达式动态获取数据

  • 最后,在父组件的template中调用子组件标签的使用传递数据

示例:

 在子组件MovieItem.vue中

<template>  <div class="series-item-box">    <div>      <img        :src="imgpath"      />    </div>    <div class="detail">      <div class="detail-title">{{title}}</div>      <div class="detail-score">{{score}}</div>    </div>  </div></template><script>export default {    props:['imgpath','title','score']};</script>

在父组件MovieList.vue中

<template>    <div>        <movie-item             imgpath="https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2455050536.jpg"            title="大话西游之大圣娶亲"            score="9.6"/>        <movie-item             imgpath="https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2614949805.jpg"            title="哈利·波特与魔法"            score="9.0"/>        <movie-item             imgpath="https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2614359276.jpg"            title="当幸福来敲门"            score="9.3"/>    </div></template><script>import MovieItem from './MovieItem.vue'export default {    components:{        MovieItem    }}
  • 自定义事件及$emit方法

语法:this.$emit('event',val)

步骤:

  • 首先,子组件在触发事件时调用this.$emit()设置自定义事件并传值

  • 其次,在父组件引用子组件标签时使用@自定义事件=“接受子组件传递数据的方法”设置接受方法

  • 最后,在父组件中使用接受方法中获取数据并使用

在子组件中

<template>  <div class="series-item-box">    <div class="pic">      <img        :src="imgpath"      />    </div>    <div class="detail">      <div class="detail-title">{{title}}</div>      <div class="detail-score">{{score}}</div>    </div>    <div>        <button @click="bookTicket">购票</button>    </div>  </div></template><script>export default {    props:['imgpath','title','score'],    methods:{        bookTicket(){            this.$emit('make',this.title)        }    }};</script>

在父组件中

<template>    <div>        <movie-item             imgpath="https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2614359276.jpg"            title="当幸福来敲门"            score="9.3"            @make="getval"/>    </div></template><script>import MovieItem from './MovieItem.vue'export default {    components:{        MovieItem    },    methods:{        getval(val){           console.log(val);        }    }}</script>
  • 事件总线

步骤:

  • 创建eventBus.js模块,并向外共享一个Vue的实例对象

  • 在数据发送方,调用bus.$emit('事件名称',要发送的数据)方法触发自定义事件

  • 在数据接收方,调用bus.$on('事件名称',事件处理函数)方法注册一个自定义事件

新建 eventBus.js

import Vue from 'vue'export default new Vue();

数据发送方

<template>    <button @click="send">发送数据</button></template><script>import bus from './eventBus.js'export default {    data(){        return{            msg:'故人西辞黄鹤楼'        }    },    methods:{        send(){            bus.$emit('share',this.msg)        }    }}</script>

数据接收方

<template>    <h2>{{fromsendMsg}}</h2></template><script>import bus from './eventBus.js'export default {    data(){        return{            fromsendMsg:''        }    },    created(){        bus.$on('share',val=>{            this.fromsendMsg=val;        })    }}</script>

 

posted @ 2022-06-25 16:25 bug制造者~~ 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    张三

    张三 (王者 段位)

    821 积分 (2)粉丝 (41)源码

     

    温馨提示

    亦奇源码

    最新会员