ElementUI Dialog 對話框,組件之間傳值


一、概述

在保留當前頁面狀態的情況下,告知用戶並承載相關操作。

 

二、自定義內容

Dialog 組件的內容可以是任意的,甚至可以是表格或表單,下面是應用了 Element Table 和 Form 組件的兩個樣例。

<!-- Table -->
<el-button type="text" @click="dialogTableVisible = true">打開嵌套表格的 Dialog</el-button>

<el-dialog title="收貨地址" :visible.sync="dialogTableVisible">
  <el-table :data="gridData">
    <el-table-column property="date" label="日期" width="150"></el-table-column>
    <el-table-column property="name" label="姓名" width="200"></el-table-column>
    <el-table-column property="address" label="地址"></el-table-column>
  </el-table>
</el-dialog>

<!-- Form -->
<el-button type="text" @click="dialogFormVisible = true">打開嵌套表單的 Dialog</el-button>

<el-dialog title="收貨地址" :visible.sync="dialogFormVisible">
  <el-form :model="form">
    <el-form-item label="活動名稱" :label-width="formLabelWidth">
      <el-input v-model="form.name" autocomplete="off"></el-input>
    </el-form-item>
    <el-form-item label="活動區域" :label-width="formLabelWidth">
      <el-select v-model="form.region" placeholder="請選擇活動區域">
        <el-option label="區域一" value="shanghai"></el-option>
        <el-option label="區域二" value="beijing"></el-option>
      </el-select>
    </el-form-item>
  </el-form>
  <div slot="footer" class="dialog-footer">
    <el-button @click="dialogFormVisible = false">取 消</el-button>
    <el-button type="primary" @click="dialogFormVisible = false">確 定</el-button>
  </div>
</el-dialog>

<script>
  export default {
    data() {
      return {
        gridData: [{
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀區金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀區金沙江路 1518 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀區金沙江路 1518 弄'
        }, {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀區金沙江路 1518 弄'
        }],
        dialogTableVisible: false,
        dialogFormVisible: false,
        form: {
          name: '',
          region: '',
          date1: '',
          date2: '',
          delivery: false,
          type: [],
          resource: '',
          desc: ''
        },
        formLabelWidth: '120px'
      };
    }
  };
</script>
View Code

點擊打開嵌套表單的 Dialog,效果如下:

 

 

三、組件之間傳值

在實際開發過程中,對於Dialog 對話框,會單獨創建一個vue文件,進行處理。這樣的話,維護頁面比較方便。而不是在一個總的vue文件,涉及幾千行代碼。

下面使用一個小demo,結合Dialog 對話框,演示組件之間傳值。

目標:

1. 父組件HelloWorld.vue,點擊添加按鈕,調用子組件company.vue,

2. 彈出Dialog 對話框。輸入表單數據

3. 表單數據回傳給父組件HelloWorld.vue

 

新建一個ElementUI項目,修改文件HelloWorld.vue,完整內容如下:

<template>
  <div class="hello">
    <el-row>
      <el-button type="primary" @click='add()'>添加</el-button>
    </el-row>
    <company ref="company" @children="parentCompany"></company>
  </div>

</template>

<script>
  // 導入組件company
  import company from "./company";

  export default {
    name: 'HelloWorld',
    // 注冊組件
 components: { company, },
    data() {
      return {
        msg: 'Welcome to Your Vue.js App'
      }
    },
    methods: {
 add() { // 彈出對話框
        this.$refs.company.showDialog()
      },
      // 子組件傳值給父組件-公司
      parentCompany(obj) {
        // 打印子組件傳遞的值
        console.log("parentCompany",obj) },
    },
  }
</script>

<style scoped>
</style>

 

在HelloWorld.vue同級目錄下,新建文件company.vue

<template>
  <el-dialog title="添加公司" :visible.sync="dialogFormVisible" width="500px">
    <el-form :model="form">
      <el-form-item label="公司名稱" :label-width="formLabelWidth">
        <el-input v-model="form.name" autocomplete="off" style="width: 218px"></el-input>
      </el-form-item>
      <el-form-item label="公司區域" :label-width="formLabelWidth">
        <el-select v-model="form.region" placeholder="請選擇活動區域">
          <el-option label="上海" value="shanghai"></el-option>
          <el-option label="北京" value="beijing"></el-option>
        </el-select>
      </el-form-item>
    </el-form>
    <div slot="footer" class="dialog-footer">
      <el-button @click="dialogFormVisible = false">取 消</el-button>
      <el-button type="primary" @click="setCompany()">確 定</el-button>
    </div>
  </el-dialog>
</template>

<script>
  export default {
    name: "company",
    data() {
      return {
        dialogFormVisible: false,
        form: {
          name: '',
          region: '',
        },
        formLabelWidth: '120px'
      }
    },
 methods: { showDialog() { this.dialogFormVisible = true
      },
      setCompany(){
        // $emit觸發當前實例上的事件
        // 觸發父組件的children事件,將this.form回傳過去
        this.$emit('children',this.form)
        // 關閉對話框
        this.dialogFormVisible = false } },
  }
</script>

<style scoped>

</style>

 

訪問首頁,效果如下:

 

 點擊添加按鈕,彈出對話框,輸入表單數據,點擊確定

 

 

 

查看console,效果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM