Vue----自定义事件

简介: Vue----自定义事件

1 自定义事件

封装组件时,为了让组件的使用者可以监听到组件内状态的变化,此时需要用到组件的自定义事件。

2 自定义事件的 3 个使用步骤

在封装组件时:

① 声明自定义事件

② 触发自定义事件

在使用组件时:

③ 监听自定义事件

2.1 声明自定义事件

开发者为自定义组件封装的自定义事件,必须事先在 emits 节点中声明。

<template>
  <div>
    <h3>Counter 组件</h3>
    <button> +1 </button>
  </div>
</template>
<script>
export default {
  name: 'Counter',
  // Counter 组件的自定义事件必须事先声明到 emits 节点中
  emits: ['change']
}
</script>
<style>
</style>

2.2 触发自定义事件

在 emits 节点下声明的自定义事件,可以通过 this.$emit(‘自定义事件的名称’) 方法进行触发。

<template>
  <div>
    <h3>Counter 组件</h3>
    <p>{{ count }}</p>
    <button @click="add"> +1 </button>
  </div>
</template>
<script>
export default {
  name: 'Counter',
  data() {
    return {
      count: 0
    }
  },
  // Counter 组件的自定义事件必须事先声明到 emits 节点中
  emits: ['change'],
  methods: {
    // 当点击 +1 按钮时,调用 add 方法,this.$emit( 'change' ) 触发change事件
    add() {
      this.count++
      this.$emit( 'change' )
    }
  }
}
</script>
<style>
</style>

2.3 监听自定义事件

在使用自定义的组件时,可以通过 v-on 的形式监听自定义事件。

<template>
  <div>
    <h1>App 组件</h1>
    <counter @change="getCount"></counter>
  </div>
</template>
<script>
import Counter from './Counter.vue'
export default {
  name: 'App',
  components: {
    Counter
  },
  methods: {
    getCount() {
      console.log('监听到了change事件')
    }
  }
}
</script>
<style>
</style>

3 自定义事件传参

在调用 this.$emit() 方法触发自定义事件时,可以通过第 2 个参数为自定义事件传参。

<template>
  <div>
    <h3>Counter 组件</h3>
    <p>{{ count }}</p>
    <button @click="add"> +1 </button>
  </div>
</template>
<script>
export default {
  name: 'Counter',
  data() {
    return {
      count: 0
    }
  },
  // Counter 组件的自定义事件必须事先声明到 emits 节点中
  emits: ['change'],
  methods: {
    // 当点击 +1 按钮时,调用 add 方法,this.$emit( 'change' ) 触发change事件
    add() {
      this.count++
      // 触发自定义事件,并且传参
      this.$emit( 'change', this.count )
    }
  }
}
</script>
<style>
</style>

在App组件中监听change事件,接收参数。

<template>
  <div>
    <h1>App 组件</h1>
    <p> App-counter: {{ count }} </p>
    <counter @change="getCount"></counter>
  </div>
</template>
<script>
import Counter from './Counter.vue'
export default {
  name: 'App',
  data() {
    return {
      count: 0
    }
  },
  components: {
    Counter
  },
  methods: {
    // 监听change事件,并接收参数
    getCount( sonCount ) {
      console.log('监听到了change事件')
      this.count = sonCount
    }
  }
}
</script>
<style>
</style>


相关文章
|
3天前
|
JavaScript 前端开发
Vue,如何引入样式文件
Vue,如何引入样式文件
|
3天前
|
JavaScript
|
1天前
|
JavaScript 开发工具 git
大事件项目40---Vue代码里如何引入相对路径图片
大事件项目40---Vue代码里如何引入相对路径图片
|
2天前
|
JavaScript
vue滚动到页面底部时加载
vue滚动到页面底部时加载
5 1
|
3天前
|
JavaScript
Vue搭配ELEMENT组件,路由不能正确跳转bug
Vue搭配ELEMENT组件,路由不能正确跳转bug
Vue搭配ELEMENT组件,路由不能正确跳转bug
|
2天前
|
JavaScript 前端开发
一个好看的vue admin模板
这是一个关于Vue管理模板的引用,提到了[PanJiaChen](https://github.com/PanJiaChen/vue-admin-template)在GitHub上的`vue-admin-template`项目。该项目是一个前端管理模板,链接指向了详细的资源。页面中还包含了一张图片,但markdown格式中无法直接显示。简而言之,这是关于一个基于Vue的后台管理界面模板的参考信息。
|
2天前
|
资源调度 JavaScript API
Vue-treeselect:为Vue应用程序提供强大选择器的指南
Vue-treeselect:为Vue应用程序提供强大选择器的指南
6 0
|
2天前
|
JavaScript
vue知识点
vue知识点
5 0
|
3天前
|
JavaScript
|
3天前
|
JavaScript
Vue搭配ELEMENT之后,右侧点击栏点击跳转到空白页解决方法
Vue搭配ELEMENT之后,右侧点击栏点击跳转到空白页解决方法