vue-组件之间互相出发时间

1.子组件出发父组件事件

子组件触发:@click="$emit('cancel')"
父组件传入:@cancel="showModal=false"
 
 
2.父组件触发子组件事件
父组件:<child ref="mychild"></child>
    this.$refs.mychild.parentHandleclick("嘿嘿嘿");
子组件:
methods: {
      parentHandleclick(e) {
        console.log(e)
      }


3.兄弟组件之间传递  利用watch 对数据进行监控 出发事件
父组件:  
<cart1 
      @callCart2="callCart2"
    />
    <cart2 
      :message1="message1"
    />

data(){
    return{
      message1:'',
    }
  },
  methods:{
    callCart2(data){
      this.message1=data
    },
  }

组件cart1

<template>
  <div>
    子组件1
    <el-button @click="sendToCart2">
      给组件2发信息
    </el-button>
  </div>
</template>

<script>
export default {
  name:'cart1',
  props:{
    message1:String
  },
  methods:{
    sendToCart2(){
      this.$emit('callCart2','妈妈说要做作业了')
    }
  }
}
</script>

组件cart2

<script>
export default {
  name:'cart2',
  props:{
    message1:String
  },
  watch:{
    message1(val){
      console.log(val)
    }
  },
}
</script>

4.非父子组件传值,事件总线(eventbus)的使用方式

方式一:

在main.js,也就是入口文件中,我们在vue的原型上添加一个bus对象;

//在mian.js中
Vue.prototype.bus = new Vue()  //这样我们就实现了全局的事件总线对象

//组件A中,监听事件
this.bus.$on('updata', function(data) {
    console.log(data)  //data就是触发updata事件带过来的数据
})

//组件B中,触发事件
this.bus.$emit('updata', data)  //data就是触发updata事件要带走的数据

方式二:

bus.js文件

// bus.js文件
import Vue from 'vue'
export default new Vue()

组件A:

扫描二维码关注公众号,回复: 11065309 查看本文章
// 组件A ,监听事件send
<template>
  <div>
    <span>{{name}}</span>
  </div>
</template>
<script>
  import Bus from './bus.js'
  export default {
    data () {
      return {
        name: ''
      }
    },
    created() {
      let _this = this
      // 用$on监听事件并接受数据
      Bus.$on('send', (data) => {
        _this.name = data
        console.log(data)
      })
    },
    methods: {}
  }
</script>

组件B

// 组件B, 触发事件send
<template>
  <div>
    <input type="button" value="点击触发" @click="onClick">
  </div>
</template>
<script>
  import Bus from './bus.js'
  export default {
    data () {
      return {
        elValue: '我是B组件数据'
      }
    },
    methods: {
        // 发送数据
      onClick() {
        Bus.$emit('send', this.elValue)
      }
    }
  }
</script>
 

猜你喜欢

转载自www.cnblogs.com/lxz-blogs/p/12758852.html