vue 组件传参

1.props & event
父组件向子组件传递props数据,子组件通过触发事件向父组件回传数据。
2.ref
ref属性可定义在子组件或原生DOM上,如果在子组件上,则指向子组件实例,如果在原生DOM上,则指向原生DOM元素(可以用做元素选择,省去querySelector的烦恼)。
父组件:
<template>
<div>
<el-button @click="dialogStatus = true">点击打开对话框</el-button>
<el-button @click="sendMessage">点击传参</el-button>
<son ref="son" :is_dialog="dialogStatus" @handleChange="handleSonChange"/>
</div>
</template>
<script>
import son from './son'
export default {
components: {
son
},
data() {
return {
dialogStatus: false, // 对话框状态, 默认关闭
message: '父组件向子组件传参'
}
},
methods: {
// 通过子组件handleChange 返回得到子组件对话框当前的状态
handleSonChange(val) {
this.dialogStatus = val
},
// 父组件向子组件传参(方式一) 通过 :参数名="数据"
// 父组件向子组件传参(方式二)
sendMessage() {
this.$refs.son.setMsg(this.message)
}
}
}
</script>
子组件:
<template> <el-dialog v-dialogDrag :visible.sync="is_dialog_v" title="子组件"> <span>{{ message }}</span> </el-dialog> </template> <script> export default { props: { // 父组件传参 is_dialog: { type: Boolean, default: false } }, data() { return { is_dialog_v: this.is_dialog, // 控制dialog显示 message: '' } }, watch: { // 监听父组件传过来的参数是否变化 is_dialog(newData, oldData) { this.is_dialog_v = newData }, // 监听弹框状态 is_dialog_v(newData, oldData) { // 子组件向父组件传参(handleChange: 子组件自定义的方法, 返回弹框当前的状态) this.$emit('handleChange', newData) } }, methods: { // 父组件调用子组件的方法 setMsg(msg) { this.message = msg } } } </script>

浙公网安备 33010602011771号