Open hunter-ji opened 4 years ago
在vue2中不允许子组件直接修改props,为单项数据流,所有若要修改只能通过额外的值,并监听props以改变额外的值。
props
props: { dialog: { type: Boolean, default: false } }
在data中创建一个localDialog,其值为this.dialog。
data
localDialog
this.dialog
data() { return { localDialog: this.dialog } }
保持同步的关键在于需要在子组件内监听props,即此处的dialog。
dialog
watch: { dialog(val) { this.localDialog = val } }
子组件使用this.$emit()即可向父组件传递变化的值。
this.$emit()
methods: { sendToFather() { this.$emit('dialogchange', this.localDialog) } }
<your-component :dialog="dialog" @dialogchange="dialogchange" /> data() { return { dialog: false } }, methods: { dialogchange(val) { this.dialog = val } }
<template> <div :visible="localDialog"> justmylife.cc <button @click="sendToFather" /> </div> </template> <script> export default { props: { dialog: { type: Boolean, default: false } }, data() { return { localDialog: this.dialog } }, watch: { dialog(val) { this.localDialog = val } }, methods: { sendToFather() { this.$emit('dialogchange', this.localDialog) } } } </script>
<template> <your-component :dialog="dialog" @dialogchange="dialogchange" /> </template> <script> import yourComponent from './yourComponent' export default { components: { yourComponent }, data() { return { dialog: false } }, methods: { dialogchange(val) { this.dialog = val } } } </script>
在vue2中不允许子组件直接修改
props
,为单项数据流,所有若要修改只能通过额外的值,并监听props
以改变额外的值。一. 设置props
二. 创建额外的值
在
data
中创建一个localDialog
,其值为this.dialog
。三. 监听
保持同步的关键在于需要在子组件内监听
props
,即此处的dialog
。四. 子组件向父组件传递
子组件使用
this.$emit()
即可向父组件传递变化的值。五. 父组件调用
六. 完整代码
1. 子组件
2. 父组件