冇事来学系--Vue2.0中自定义事件

简介: 定义一种组件之间通信的方式,适用于子传父

自定义事件的声明


$emit('事件名称', 需要传递的参数 )

// click点击事件的本质(vue是怎么操作的)
$emit('click', {
  clientX: '',
  clientY: '',
  target: dom元素
})
------------------------------------------------------------
// eg:
// 子组件通过定义事件child-msg的方式将msg传给父组件
// 子组件中有个button按钮,并为其添加click事件
<template>
  <button @click="deliver"></button>
</template>
<script>
  export default {
    data(){
      return {
        msg: '我是子组件的数据'
      }
    },
    methods: {
      // 按钮点击事件的处理函数
      // 当点击的时候使用$emit()触发事件,把message传给父组件
      deliver(){
        this.$emit('child-msg', this.msg)
      }
    }
  }
</script>
---------------------------------------------------------------
// 父组件在使用子组件的时候,绑定子组件自定义的child-msg事件
<template>
  <Son @child-msg="getChildMsg"></Son>
</template>
<script>
export default {
  data(){
    return {
      message: ''   // 设置message来接收子组件的数据 (这里的值类型得根据需要传递的类型写)
    }
  },
  methods: {                // 通过回调函数来接收数据
    getChildMsg(val){       // 定义形参val接收数据
      this.message = val    // 将子组件传过来的数据转存到父组件
    }
  }
}
</script>



事件的绑定除了可以在标签中通过v-on绑定之外,还可以通过ref属性获取到相应的元素,然后在生命周期钩子mounted( )中通过this.refs.xxx.refs.xxx.refs.xxx.on('事件名称', 回调函数) 进行绑定 。

注意此时的回调函数必须写在当前组件的methods节点中,或者使用箭头函数这样回调函数的this才会指向当前组件的实例对象,才能操作到当前组件里面的data

直接在$on( )方法中声明回调函数,则里面的this指向的是事件的触发者,即绑定事件的那个组件实例对象或者DOM元素


事件的解绑


this.$off('事件名')解绑一个自定义事件

this.$off(['事件1', '事件2']) 解绑多个自定义事件

this.$off( )解绑所有的自定义事件(不传递参数)


注意

  1. 在生命周期钩子中的销毁阶段,使用$destroy( )销毁组件实例,则它身上所有的自定义事件都会失效,但是原生的DOM事件仍然有效
  2. 在组件上也可以绑定原生DOM事件,但是需要在绑定的时候加上native修饰符
<Children @click.native="show"></Children>


目录
相关文章
|
JavaScript 容器
冇事来学系--Vue2.0中VueComponent(组件)
组件的本质 组件的本质就是一个 构造函数 f VueComponent (options) { this._init(options); } ,是Vue.extend( )生成的 当我们使用组件时,写了组件的标签,Vue解析时就会创建该组件的实例对象,即Vue帮我们执行了这一句代码 new VueComponent(options) (options就是我们写的data、methods、computed等数据) 每次调用Vue.extend( )时,返回的都是一个全新的VueComponent
309 0
|
存储 JavaScript 前端开发
冇事来学系--Vue2.0中vuex(上)
专门在Vue中实现集中式状态 (数据) 管理的一个Vue插件,对vue中多个组件的共享状态进行集中式的管理(读/写) ,适用于任意组件之间的通信
185 0
|
JavaScript
冇事来学系--Vue2.0 组件开发详讲(下)
组件的自定义属性props props节点是和data、methods等同级的节点,值是一个数组
130 0
|
JavaScript 前端开发
冇事来学系--Vue2.0中讲讲生命周期吧
生命周期(Life Cycle) 是指一个组件从创建->运行->销毁的整个阶段,强调的是一个时间段。 生命周期函数:是由vue框架提供的内置函数,会伴随着组件的生命周期,自动按次序执行 。是vue在关键时刻帮我们调用的一些特殊名字的函数。 生命周期函数中的this指向的是vm或组件实例对象
177 0
|
存储 前端开发 JavaScript
冇事来学系--Vue2.0中路由Router
路由的概念与原理 路由(router),就是对应关系。即 Hash地址(锚点链接) 与 组件 之间的对应关系 注意:锚点链接的特点-->不会刷新页面,但是会产生浏览历史
204 0
|
前端开发 JavaScript 数据库
冇事来学系--Vue2.0中Promise详讲(上)
回调地狱 多层回调函数的相互嵌套,就形成了回调地狱
307 0
|
前端开发
冇事来学系--Vue2.0中Promise详讲(下)
then-fs的基本使用 可以通过node下载then-fs。 npm install then-fs
165 0
|
缓存 JavaScript 开发者
冇事来学系--Vue2.0中动态组件和插槽slot
动态组件指的是动态切换组件的显示与隐藏。
503 0
|
JavaScript
vue3,你还为状态为何物而发愁吗?(二)
为啥需要状态?因为组件划分的非常原子化(细腻),所以造成了很多的组件,那么组件之间就需要一种“通讯方式”,这个就是状态了。不仅仅是传递数据,还可以实现事件总线。
vue3,你还为状态为何物而发愁吗?(二)
|
JavaScript 前端开发 API
vue3,你还为状态为何物而发愁吗?(一)
为啥需要状态?因为组件划分的非常原子化(细腻),所以造成了很多的组件,那么组件之间就需要一种“通讯方式”,这个就是状态了。不仅仅是传递数据,还可以实现事件总线。
vue3,你还为状态为何物而发愁吗?(一)