el-diglog中使用子组件,在父组件点击提交时获取子组件中的数据
思路:通过在子组件中定义一个方法,将需要传递给父组件的数据作为参数传递给该方法,然后在父组件中通过$refs获取子组件实例,并调用该方法获取子组件中的数据。具体实现步骤如下:
1.在子组件中定义一个方法,将需要传递给父组件的数据作为参数传递给该方法:
// 子组件中定义的方法
submitData() {
// 将需要传递给父组件的数据作为参数传递给该方法
this.$emit('submit', this.formData);
}
2.在父组件中引入子组件,并在子组件标签上添加ref属性:
<!-- 父组件中引入子组件 -->
<template>
<div>
<el-dialog title="子组件" :visible.sync="dialogVisible" width="30%">
<child-component ref="childComponent"></child-component>
<div slot="footer">
<el-button @click="submitData">提交</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import childComponent from './childComponent.vue';
export default {
components: {
childComponent
},
data() {
return {
dialogVisible: false
}
},
methods: {
// 获取子组件中的数据
submitData() {
// 通过$refs获取子组件实例
const childComponent = this.$refs.childComponent;
// 调用子组件中定义的方法获取子组件中的数据
childComponent.submitData();
}
}
}
</script>
3.在父组件中监听子组件中定义的方法,并将获取到的数据保存到父组件中:
<!-- 父组件中引入子组件 -->
<template>
<div>
<el-dialog title="子组件" :visible.sync="dialogVisible" width="30%">
<child-component @submit="handleData" ref="childComponent"></child-component>
<div slot="footer">
<el-button @click="submitData">提交</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import childComponent from './childComponent.vue';
export default {
components: {
childComponent
},
data() {
return {
dialogVisible: false,
formData: {}
}
},
methods: {
// 获取子组件中的数据
submitData() {
// 通过$refs获取子组件实例
const childComponent = this.$refs.childComponent;
// 调用子组件中定义的方法获取子组件中的数据
childComponent.submitData();
},
// 监听子组件中定义的方法,并将获取到的数据保存到父组件中
handleData(data) {
this.formData = data;
}
}
}
</script>