首先, Vue 里面的组件之间的数据流动是 单向 的, 数据可以从父组件传递给子组件, 但不能从子组件传递给父组件, 因为组件和组件之间是 隔离 的. 就像两个嵌套的 黑盒子 .

能通过 props 向子组件传递数据其实是因为子组件 暴露 出了这个属性到 外部, 但子组件并不知道是谁把数据传过来的.

要把数据传回给父组件, 那就需要 自定义事件, 这相当于是给子组件安了一个 监视器 , 使得父组件可以 监测 到子组件的一举一动, 这样也就可以拿到子组件的数据了.

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<title>Vue Test</title>
</head> <body>
<div id="app">
<div id="counter-event-example">
<p>{{ total }}</p>
<!-- 父组件绑定子组件的自定义事件: increment -->
<button-counter v-on:increment="incrementTotal"></button-counter>
<button-counter v-on:increment="incrementTotal"></button-counter>
</div>
</div> <script>
Vue.component('button-counter', {
template: '<button v-on:click="incrementHandler">{{ counter }}</button>',
// 这里的 data 不是一个对象, 而是一个可以返回一个对象的函数
// 好处是每个实例可维护一份被返回对象的独立拷贝,若 data 为对象则会影响其他实例
data: function () {
return {
counter: 0
}
},
methods: {
incrementHandler: function () {
this.counter += 1;
// $emit() 可将 调用当前方法的事件 外抛, 实现 自定义事件.
this.$emit('increment');
}
},
})
new Vue({
el: '#counter-event-example',
data: {
total: 0
},
methods: {
incrementTotal: function () {
this.total += 1
}
}
})
</script>
</body> </html>

最新文章

  1. 7 Container With Most Water_Leetcode
  2. (转载)HTML5 LocalStorage 本地存储
  3. 基于HTML5的WebGL呈现A星算法的3D可视化
  4. plist文件Boolean类型读写方法
  5. js部分---函数与递归;
  6. 关于如何用sql语句查询出连续的一串数字
  7. Android 使用日常
  8. dedecms 获取文章发布时间和获取文章最后更新时间
  9. js管理内存
  10. 有关 json对象 取出其中数据问题
  11. Lua table.sort排序
  12. 业余草分享 Spring Boot 2.0 正式发布的新特性
  13. jQuery 效果 – 动画
  14. SpringMVC SessionAttributes 简述
  15. 大数据架构:搭建CDH5.5.1分布式集群环境
  16. 判断终端是ios还是android来加载不同的样式
  17. Svn项目管理工具
  18. PHP+Ajax+plupload无刷新上传头像代码
  19. redhat图形界面启动后出现桌面但是没有登录界面解决办法
  20. JDBC 学习笔记(九)—— ResultSetMetaData

热门文章

  1. iOS开发-多层嵌套block中如何使用__weak和__strong
  2. JVM----双亲委派模型
  3. 使用 Jenkins 发布 web 应用至 Tomcat
  4. [go]包管理
  5. [Java复习] Java基础 Basic
  6. mvc导出数据到pdf
  7. 007-Linux 查看端口
  8. 用Red5搭建支持WEB播放的实时监控视频
  9. Redis 部署安装
  10. centos7安装redis3.2.5集群