父组件:

API上的解释不多:

https://cn.vuejs.org/v2/api/#vm-emit

vm.$emit( event, […args] )

  • 参数:

    • {string} event
    • [...args]

    触发当前实例上的事件。附加参数都会传给监听器回调。

  • Source

我们可以从组件的api中查看这个用法。

数据在组件中是单向流动的,当父组件的属性变化时,将传导给子组件,但是不会反过来。这是为了防止子组件无意修改了父组件的状态——这会让应用的数据流难以理解。《单向数据流

注意在 JavaScript 中对象和数组是引用类型,指向同一个内存空间,如果 prop 是一个对象或数组,在子组件内部改变它会影响父组件的状态。

我们知道,父组件是使用 props 传递数据给子组件,但如果子组件要把数据传递回去,应该怎样做?那就是自定义事件!

自定义事件

使用 v-on 绑定自定义事件

每个 Vue 实例都实现了事件接口(Events interface),即:

  • 使用 $on(eventName) 监听事件
  • 使用 $emit(eventName) 触发事件

Vue的事件系统分离自浏览器的EventTarget API。尽管它们的运行类似,但是$on 和 $emit 不是addEventListener 和 dispatchEvent 的别名。

另外,父组件可以在使用子组件的地方直接用 v-on 来监听子组件触发的事件。

不能用$on侦听子组件抛出的事件,而必须在模板里直接用v-on绑定,就像以下的例子:

下面是一个例子:

<div id="counter-event-example">
<p>{{ total }}</p>
<button-counter v-on:increment="incrementTotal"></button-counter>
<button-counter v-on:increment="incrementTotal"></button-counter>
</div> Vue.component('button-counter', {
template: '<button v-on:click="increment">{{ counter }}</button>',
data: function () {
return {
counter: 0
}
},
methods: {
increment: function () {
this.counter += 1
this.$emit('increment')
}
},
})
new Vue({
el: '#counter-event-example',
data: {
total: 0
},
methods: {
incrementTotal: function () {
this.total += 1
}
}
})

在本例中,子组件已经和它外部完全解耦了。它所做的只是报告自己的内部事件,至于父组件是否关心则与它无关。留意到这一点很重要。

给组件绑定原生事件

有时候,你可能想在某个组件的根元素上监听一个原生事件。可以使用 .native 修饰 v-on 。例如:

<my-component v-on:click.native="doTheThing"></my-component>

最新文章

  1. [转].net core 通过ViewComponent封装控件 左侧菜单
  2. PHP获取某个表与其他表的关联关系算法
  3. XE6 &amp; IOS开发之免证书真机调试(2):连接真机并运行App(有图有真相)
  4. scala伴生对象
  5. 根据不同的屏幕宽度引入不同的css文件
  6. 外中断之swi软件中断:
  7. 爬虫Larbin解析(二)——sequencer()
  8. UIStackView相关
  9. 配置mysql允许远程连接
  10. SQL 使用经验
  11. 第01讲- Android背景知识
  12. Python 为何能坐稳 AI 时代头牌语言
  13. 小委出发vijos-1572 jdoj-1572
  14. Redis数据类型--string
  15. mariadb集群配置(主从和多主)
  16. 062、如何使用flannel host-gw backend(2019-04-02 周二)
  17. 计算日期差(Python实现)
  18. JAVAEE——SpringBoot入门:简介、微服务、环境准备、helloworld与探究、快速构建项目
  19. ASP.NET Web API中展示实体Link相关的方面
  20. Team Foundation Server 开发流程管理管理研讨会

热门文章

  1. Oracle基础 03 回滚表空间 undo
  2. springmvc Converter
  3. Plain Old Data (POD)
  4. java使用maven项目(二)分模块开发
  5. Spring:面向切片编程
  6. c# 使用ssh连接远程主机(ssh.net演示)
  7. unity制作简单血条
  8. 洛谷 P1182 数列分段`Section II`【二分答案】
  9. Problem A: 英雄无敌3(1)【dp/待补】
  10. hexo 的错误