Vue中$bus的用法及$on、$off的使用说明

目录
  • $bus的用法及$on、$off的使用
  • vue实例事件总结($on,$once,$off,$emit)
    • 1.什么是实例事件?
    • 2.使用场景
    • 3.与$on对应的还有一个$once
    • 4.$off关闭实例事件

$bus的用法及$on、$off的使用

Vue中 $bus一般与 $on、 $off连用,一般用在任意组件间的通讯,所以今天就一起说,这里给大家举一个案例

首先在main.js中配置全局总线

//引入Vue
import Vue from 'vue'
//引入App
import App from './App.vue'
//关闭Vue的生产提示
Vue.config.productionTip = false
//创建vm
new Vue({
    el:'#app',
    render: h => h(App),
    beforeCreate(){                 //在初始化阶段前
        Vue.prototype.$bus = this   //配置全局总线,bus有总线的意思
    }
})

在Student组件中提供数据给另一个组件(School组件)

<template>
    <div class="student">
        <h2>学生姓名:{{name}}</h2>
        <h2>学生性别:{{sex}}</h2>
        <button @click="sendStudentName">把学生名给School组件</button>
    </div>
</template>
<script>
    export default {
        name:'Student',
        data() {
            return {
                name:'张三',
                sex:'男',
            }
        },
        methods: {
            sendStudentName(){        //提供发送数据
                this.$bus.$emit('hello',this.name)
            }
        },
    }
</script>

在School组件中使用事件总线,接收数据。School组件想接收数据,则在School组件中给 $bus绑定事件,事件的回调则留在School组件自身。

<template>
    <div class="school">
        <h2>学校名称:{{name}}</h2>
        <h2>学校地址:{{address}}</h2>
    </div>
</template>
<script>
    export default {
        name:'School',
        data() {
            return {
                name:'工程学院',
                address:'重庆巴南',
            }
        },
        mounted() {
            this.$bus.$on('hello',(data)=>{      //绑定当前事件(这里以hello为例)
                console.log('我是School组件,收到了数据',data)
            })
        },
        beforeDestroy(){        //收尾操作,销毁
            this.$bus.$off('hello')  //$off解绑当前组件所用到的事件
        }
    }
</script>

到这里已经结束了,再给一个App组件,大家可以试一试这个案例

<template>
    <div class="app">
        <School/>
        <Student/>
    </div>
</template>
<script>
    import Student from './components/Student'
    import School from './components/School'
    export default {
        name:'App',
        components:{School,Student},
    }
</script>

vue实例事件总结($on,$once,$off,$emit)

1.什么是实例事件?

实例事件就是在构造器外部调用构造器内部的数据。

2.使用场景

比如构造器已经有一个加的方法,现在领导说还要做一个减的方法,而我又不想动构造器里面的信息,那就可以使用实例事件了.操作如下:

3.与$on对应的还有一个$once

上述代码只改一个单词$once

 app.$once('reduce',function(){
          console.log("减的方法触发了");
          this.num--
      })

结果:减的方法只执行一次.

4.$off关闭实例事件

关闭reduce后,减就失效了.

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • vue中$refs, $emit, $on, $once, $off的使用详解

    1.$refs的使用场景 父组件调用子组件的方法,可以传递数据. 父组件: <div id="app"> <child-a ref="child"></child-a> <button @click="getMyEvent">点击父组件</button> <div> <script> import ChildA from './child.vue' export

  • 浅谈vue中$bus的使用和涉及到的问题

    Hello大家周末好,最近项目比较忙所以没有及时的更新抱歉,今天给大家讲一vue.bus.使用过的都知道$bus是兄弟之间相互传值的项目中说实话用的地方不算多但是也会用到(每一个领域都是会有坑的呀). 1:创建$bus文件 创建一个文件内容如下: import Vue from 'vue' export default new Vue(); 2:引入$bus main.js: import Bus from './views/bus/bus'; Vue.prototype.$bus = Bus;

  • Vue2与Vue3兄弟组件通讯bus的区别及用法

    目录 vue2.x vue3.x tiny-emitter插件用法 mitt插件用法 vue2.x Vue.prototype.$bus=new Vue() 监听: this.$bus.$on('方法名',(参数)=>{}),它可以累加 触发: this.$bus.$emit('方法名',实参值) 销毁:this.$bus.$off('方法名'),谁监听谁销毁 注意: 由于监听可以累加, 所以必须要有第四步销毁 vue3.x tiny-emitter插件用法 安装插件 npm i tiny-em

  • Vue中$bus的用法及$on、$off的使用说明

    目录 $bus的用法及$on.$off的使用 vue实例事件总结($on,$once,$off,$emit) 1.什么是实例事件? 2.使用场景 3.与$on对应的还有一个$once 4.$off关闭实例事件 $bus的用法及$on.$off的使用 Vue中 $bus一般与 $on. $off连用,一般用在任意组件间的通讯,所以今天就一起说,这里给大家举一个案例 首先在main.js中配置全局总线 //引入Vue import Vue from 'vue' //引入App import App

  • vue中appear的用法

    关于appear的用法和enter的用法相似,它只是在第一次渲染的时候才会起作用.看完整的代码: 别忘了引用vue.js <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>初始渲染的过渡</title> <script src="vue.js"></script>

  • 关于vue中 $emit的用法详解

    1.父组件可以使用 props 把数据传给子组件. 2.子组件可以使用 $emit 触发父组件的自定义事件. vm.$emit( event, arg ) //触发当前实例上的事件 vm.$on( event, fn );//监听event事件后运行 fn: 例如:子组件: <template> <div class="train-city"> <span @click='select(`大连`)'>大连</span> </div&

  • Vue 中mixin 的用法详解

    说下我对vue中mixin的一点理解 vue中提供了一种混合机制--mixins,用来更高效的实现组件内容的复用.最开始我一度认为这个和组件好像没啥区别..后来发现错了.下面我们来看看mixins和普通情况下引入组件有什么区别? 组件在引用之后相当于在父组件内开辟了一块单独的空间,来根据父组件props过来的值进行相应的操作,单本质上两者还是泾渭分明,相对独立. 而mixins则是在引入组件之后,则是将组件内部的内容如data等方法.method等属性与父组件相应内容进行合并.相当于在引入后,父

  • vue中keep-alive的用法及问题描述

    1.keep-alive的作用以及好处 在做电商有关的项目中,当我们第一次进入列表页需要请求一下数据,当我从列表页进入详情页,详情页不缓存也需要请求下数据,然后返回列表页,这时候我们使用keep-alive来缓存组件,防止二次渲染,这样会大大的节省性能. 2.keep-alive的基本用法 在app.vue中 <!-- 缓存所有的页面 --> <keep-alive> <router-view v-if="$route.meta.keep_alive"&g

  • Vue中$refs的用法详解

    说明:vm.$refs 一个对象,持有已注册过 ref 的所有子组件(或HTML元素) 使用:在 HTML元素 中,添加ref属性,然后在JS中通过vm.$refs.属性来获取 注意:如果获取的是一个子组件,那么通过ref就能获取到子组件中的data和methods <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>D

  • Vue Extends 扩展选项用法完整实例

    本文实例讲述了Vue Extends 扩展选项用法.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Vue Extends 扩展选项</title> <script type="text/javascript" src="https:/

  • vue中$refs的用法及作用详解

    一般来讲,获取DOM元素,需document.querySelector(".input1")获取这个dom节点,然后在获取input1的值. 但是用ref绑定之后,我们就不需要在获取dom节点了,直接在上面的input上绑定input1,然后$refs里面调用就行. 然后在javascript里面这样调用:this.$refs.input1 这样就可以减少获取dom节点的消耗了 用法如下: HTML: <div id="app"> <input

  • vue.js中toast用法及使用toast弹框的实例代码

    1.首先引入 import { Toast } from 'vant' 写个小列子 绑定一个click事件 2.写事件 在methods写方法 showToast() { this.$toast({ message: "今日签到+3", }) }, 3.效果图如下 一个简单的toast提示成就好了 下面通过实例代码看下vue 中使用 Toast弹框 import { ToastPlugin,ConfirmPlugin,AlertPlugin} from 'vux' Vue.use(To

  • Vue插槽原理与用法详解

    本文实例讲述了Vue插槽原理与用法.分享给大家供大家参考,具体如下: 1 插槽内容 Vue 实现了一套内容分发的 API,这套 API 基于当前的 Web Components 规范草案,将 <slot> 元素作为承载分发内容的出口. 它允许你像这样合成组件: <div id="app1"> <navigation-link url="/profile"> Your Profile </navigation-link>

随机推荐