<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <div id="app"> <!-- <child :msg="msg" @update:msg="getMsg"></child> --> <child :msg.sync="msg"></child> <!-- <child :msg="msg" @update:msg="msg=$event"></child> --> <!-- <button @click="$event"></button> --> <!-- <el-dialog :visible.sync="dialogVisible" ></el-dialog> --> <!-- <el-dialog :visible="dialogVisible" @update:visible="dialogVisible = $event"></el-dialog> --> </div> <script src="../vue.js"></script> <script> /* v-bind的修饰符 .sync 同步 父组件往子组件中传递数据,子组件的操做也能够修改这个数据,同时子组件仅操做该数据时 组件上的自定义事件函数中的$event是触发该自定义事件时的第二个参数(子组件传递过来的数据) <组件标签 :子组件prop.sync="父组件data"></组件标签> <组件标签 :子组件prop="父组件data" @update:子组件prop="父组件data = $event"></组件标签> 那么子组件中必定有this.$emit('update:prop名字', '数据') 这个数据就是将来的$event */ const child = { template: ` <div> {{msg}} <button @click="changeMsg">按钮</button> </div> `, props: { msg: String }, methods: { changeMsg () { this.$emit('update:msg', '子组件中修改后的msg') } } } const app = new Vue({ el: "#app", components: { child }, data: { msg: '父组件中的数据' }, methods: { getMsg (msg) { // console.log(e) this.msg = msg } } }) </script> </body> </html>