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