+ 收藏我们

网站模板

网站模板搜索
404模板 营销型模板 外贸网站模板 单页模板 双语模板 标签大全
电话:18630701785
首页 > 源码论坛 > vue2 全局事件总线(GlobalEvent) 代码实例 >

vue2 全局事件总线(GlobalEvent) 代码实例

时间:2024-12-01 12:50:24
main.js
//引入Vue
import Vue from "vue";
//引入App
import App from './App';
 
//关闭Vue的生产提示
Vue.config.productionTip = false;
 
 
//创建一个vc
// const Demo = Vue.extend({}); //demo 傀儡不需要配置对象
//
// const d = new Demo(); //此时这个d就是组件实例对象 => vc
 
// Vue.prototype.x = d;
 
new Vue({
    el:'#app',
    render: h => h(App),
    beforeCreate() {
        //此时这个this就是vm,只不过这个时候还并没有去解析模版
        Vue.prototype.$bus = this; //安装全局事件总线
    }
});
 
 
App.vue
<template>
   <div class="app">
      <h1>{{ msg }}</h1>
      <School/>
      <Student/>
   </div>
</template>
 
<script>
import Student from "@/components/Student";
import School from "@/components/School";
export default {
  name: "App",
  components: {
    School,
    Student,
  },
  data() {
    return {
      msg: 'helloこんにちは',
      studentName: ''
    }
  }
}
</script>
 
<style>
   /*
   全局的样式是不需要加scoped
   全局共享
   */
   .app{
     background: gray;
     padding: 5px;
   }
</style>
 
 
Student.vue
<template>
   <div class="student">
     <h2>姓名:{{  name }}</h2>
     <h2>性别: {{ sex }}</h2>
     <button @click="sendStudentName">把学生名传递给school组件</button>
   </div>
</template>
 
<script>
 
export default {
  name: "Student",
  data(){
    console.log(this);
    return {
       name: '张三',
       sex: '男',
    }
  },
  methods:{
    sendStudentName(){
      this.$bus.$emit('hello', this.name);
    }
  },
  mounted() {
    // console.log(this.x); //vc.__proto__ === VueComponent.protoType VueComponent.protoType.__proto__ === Vue.prototype(完事了)
  }
}
</script>
 
<style scoped>
  .student{
    background: orange;
    padding: 5px;
    margin-bottom: 10px;
  }
</style>

 

School.vue
<template>
   <div class="demo">
     <h2>学校名称:{{  name }}</h2>
     <h2>学校地址: {{ address }}</h2>
   </div>
</template>
 
<script>
export default {
  name: "School",
  data(){
    console.log(this);
    return {
       name: 'wust university',
       address: '武汉科技大学'
    }
  },
  mounted() {
    console.log('School', this);
    this.$bus.$on('hello', (data) => {
      console.log(`我是School组件,我收到了数据,${data}`);
    })
  },
  beforeDestroy() {
    this.$bus.$off('hello'); //销毁解绑
  }
}
</script>
 
<style scoped>
   /*scoped代表局部的*/
  .demo{
    background: skyblue;
    padding:5px
  }
</style>

有问题可以加入网站技术QQ群一起交流学习

本站会员学习、解决问题QQ群(691961965)

客服微信号:lpf010888

Title