vue组件通讯(一)

一、创建组件和使用组件

1、全局创建


Vue.component('testCom',{
    template:'<div>我是一个测试组件</div>'
});



2、 局部创建

第一步: 先创建一个单文件组件

例如:testcom.vue

<template>
  <div>我是一个测试组件111122222</div>
</template>

<script>
export default {

}
</script>

<style>

</style>

第二步:在需要的文件中引入刚才的testcom.vue,并注册

引入:

import testCom from '@/pages/home/testcom'

注册:

export default {
   ....,
    components:{
        testCom
    },
   ....
}


第三步:在template中使用组件,例如:

<template>
    <div class="home">
            <test-com></test-com>
        </div>
    </div>
</template>

二、 组件通讯(三种方式)

第一种 父->子

 主要通过props实现父传子

 具体实现:

   1.先有两个组件,父:A.vue, 子:B.vue,并将b.vue引入A.vue并注册
   2.在A.vue组件template中使用B.vue工给B.vue绑定传递的属性
           例如:
        <test-com :sub="title"></test-com>

      其中sub表示要传递给子组件的属性,并且sub前要加冒号(:)
    3.在B.vue中通过props接收sub属性
        export default {
           props:['sub'],
           .....
        
        }

第二种 子->父

通过$emit来传递

 格式: this.$emit('要派发的自定义事件',要传递的数据);

 步骤:

    首先:在子组件绑定一个事件,触发一个方法,在方法内部派发一个派发自定义事件,例如:
    
    html部分:
     <button @click="say">向父组件发送数据</button>
     
    js部分:
     methods:{
         say() {
            this.$emit('goup',this.num);
         }
       }

   其次:在父组件使用的子组件中@监听自定义事件,例如:
       html部分:
            <test-com :sub="title" @goup="getdata"></test-com>

        js部分:
            getdata(res) {
                   // console.log(res);
                   this.msg=res;
                }
              
        }

第三种 兄弟->兄弟(即非父子)

1、global Bus:主要利用创建一个空vue做为桥梁,实现兄弟之间通讯

第一步:创建两个A,B兄弟组件和一个bus.js

bus.js文件:
```
import Vue from 'vue'
//创建空的vue
var bus = new Vue()
```

第二步:分别在A,B两个兄弟组件中引入bus.js

import bus from '@/components/common/bus'

第三步:在A组件触发一个事件,在事件方法中派发睚定义事件,并发送传递给B组件的数据,例如A->B

A组件代码中:

 html部分:
      <button @click="go">将发送给B组件</button>
 js部分:
      export default {
        data() {
            return {
                info:'500万'
            }
        },
        methods:{
            go() {
              bus.$emit('tob',this.info);  
            }
        }
    
    }

B组件代码中:在B组件中的生命周期中接收A组件发过来的数据

     created() {
        bus.$on('tob',(res)=>{
          this.msg=res;
         
        })
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 序 今年大前端的概念一而再再而三的被提及,那么大前端时代究竟是什么呢?大前端这个词最早是因为在阿里内部有很多前端开...
    一缕殇流化隐半边冰霜阅读 13,838评论 19 92
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,347评论 19 139
  • 身边有一对朋友,我们都是一起长大的发小,男生从初中开始追求女生,前不久研究生毕业两人刚刚领证,我们姑且称男生女生为...
    榴莲臭臭522阅读 4,662评论 0 3
  • 1. 只要锄头舞得好,哪有墙脚挖不倒。 2. 本人已死,有事烧纸,小事叫魂,大事刨坟。 3. 安眠药和泻药一起吃,...
    夕柏玟阅读 1,677评论 3 11
  • 1月,第二届坝头杯羽毛球赛第三名,家乡的羽毛球氛围越来越好了!
    小明61阅读 825评论 0 0