打开..._elementui组件传值">
当前位置:   article > 正文

ElementUI Dialog 对话框,组件之间传值

elementui组件传值

一、概述

在保留当前页面状态的情况下,告知用户并承载相关操作。

二、自定义内容

Dialog 组件的内容可以是任意的,甚至可以是表格或表单,下面是应用了 Element Table 和 Form 组件的两个样例。

  1. <!-- Table -->
  2. <el-button type="text" @click="dialogTableVisible = true">打开嵌套表格的 Dialog</el-button>
  3. <el-dialog title="收货地址" :visible.sync="dialogTableVisible">
  4. <el-table :data="gridData">
  5. <el-table-column property="date" label="日期" width="150"></el-table-column>
  6. <el-table-column property="name" label="姓名" width="200"></el-table-column>
  7. <el-table-column property="address" label="地址"></el-table-column>
  8. </el-table>
  9. </el-dialog>
  10. <!-- Form -->
  11. <el-button type="text" @click="dialogFormVisible = true">打开嵌套表单的 Dialog</el-button>
  12. <el-dialog title="收货地址" :visible.sync="dialogFormVisible">
  13. <el-form :model="form">
  14. <el-form-item label="活动名称" :label-width="formLabelWidth">
  15. <el-input v-model="form.name" autocomplete="off"></el-input>
  16. </el-form-item>
  17. <el-form-item label="活动区域" :label-width="formLabelWidth">
  18. <el-select v-model="form.region" placeholder="请选择活动区域">
  19. <el-option label="区域一" value="shanghai"></el-option>
  20. <el-option label="区域二" value="beijing"></el-option>
  21. </el-select>
  22. </el-form-item>
  23. </el-form>
  24. <div slot="footer" class="dialog-footer">
  25. <el-button @click="dialogFormVisible = false">取 消</el-button>
  26. <el-button type="primary" @click="dialogFormVisible = false">确 定</el-button>
  27. </div>
  28. </el-dialog>
  29. <script>
  30. export default {
  31. data() {
  32. return {
  33. gridData: [{
  34. date: '2016-05-02',
  35. name: '王小虎',
  36. address: '上海市普陀区金沙江路 1518 弄'
  37. }, {
  38. date: '2016-05-04',
  39. name: '王小虎',
  40. address: '上海市普陀区金沙江路 1518 弄'
  41. }, {
  42. date: '2016-05-01',
  43. name: '王小虎',
  44. address: '上海市普陀区金沙江路 1518 弄'
  45. }, {
  46. date: '2016-05-03',
  47. name: '王小虎',
  48. address: '上海市普陀区金沙江路 1518 弄'
  49. }],
  50. dialogTableVisible: false,
  51. dialogFormVisible: false,
  52. form: {
  53. name: '',
  54. region: '',
  55. date1: '',
  56. date2: '',
  57. delivery: false,
  58. type: [],
  59. resource: '',
  60. desc: ''
  61. },
  62. formLabelWidth: '120px'
  63. };
  64. }
  65. };
  66. </script>
View Code

点击打开嵌套表单的 Dialog,效果如下:

三、组件之间传值

在实际开发过程中,对于Dialog 对话框,会单独创建一个vue文件,进行处理。这样的话,维护页面比较方便。而不是在一个总的vue文件,涉及几千行代码。

下面使用一个小demo,结合Dialog 对话框,演示组件之间传值。

目标:

1. 父组件HelloWorld.vue,点击添加按钮,调用子组件company.vue,

2. 弹出Dialog 对话框。输入表单数据

3. 表单数据回传给父组件HelloWorld.vue

新建一个ElementUI项目,修改文件HelloWorld.vue,完整内容如下:

  1. <template>
  2. <div class="hello">
  3. <el-row>
  4. <el-button type="primary" @click='add()'>添加</el-button>
  5. </el-row>
  6. <company ref="company" @children="parentCompany"></company>
  7. </div>
  8. </template>
  9. <script>
  10. // 导入组件company
  11. import company from "./company";
  12. export default {
  13. name: 'HelloWorld',
  14. // 注册组件
  15. components: {
  16. company,
  17. },
  18. data() {
  19. return {
  20. msg: 'Welcome to Your Vue.js App'
  21. }
  22. },
  23. methods: {
  24. add() {
  25. // 弹出对话框
  26. this.$refs.company.showDialog()
  27. },
  28. // 子组件传值给父组件-公司
  29. parentCompany(obj) {
  30. // 打印子组件传递的值
  31. console.log("parentCompany",obj)
  32. },
  33. },
  34. }
  35. </script>
  36. <style scoped>
  37. </style>

在HelloWorld.vue同级目录下,新建文件company.vue

  1. <template>
  2. <el-dialog title="添加公司" :visible.sync="dialogFormVisible" width="500px">
  3. <el-form :model="form">
  4. <el-form-item label="公司名称" :label-width="formLabelWidth">
  5. <el-input v-model="form.name" autocomplete="off" style="width: 218px"></el-input>
  6. </el-form-item>
  7. <el-form-item label="公司区域" :label-width="formLabelWidth">
  8. <el-select v-model="form.region" placeholder="请选择活动区域">
  9. <el-option label="上海" value="shanghai"></el-option>
  10. <el-option label="北京" value="beijing"></el-option>
  11. </el-select>
  12. </el-form-item>
  13. </el-form>
  14. <div slot="footer" class="dialog-footer">
  15. <el-button @click="dialogFormVisible = false">取 消</el-button>
  16. <el-button type="primary" @click="setCompany()">确 定</el-button>
  17. </div>
  18. </el-dialog>
  19. </template>
  20. <script>
  21. export default {
  22. name: "company",
  23. data() {
  24. return {
  25. dialogFormVisible: false,
  26. form: {
  27. name: '',
  28. region: '',
  29. },
  30. formLabelWidth: '120px'
  31. }
  32. },
  33. methods: {
  34. showDialog() {
  35. this.dialogFormVisible = true
  36. },
  37. setCompany(){
  38. // $emit触发当前实例上的事件
  39. // 触发父组件的children事件,将this.form回传过去
  40. this.$emit('children',this.form)
  41. // 关闭对话框
  42. this.dialogFormVisible = false
  43. }
  44. },
  45. }
  46. </script>
  47. <style scoped>
  48. </style>

访问首页,效果如下:

 点击添加按钮,弹出对话框,输入表单数据,点击确定

查看console,效果如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/279800
推荐阅读
  

闽ICP备14008679号