新人成長之入門Vue.js彈窗Dialog介紹(二)

来源:https://www.cnblogs.com/tanglb/archive/2018/09/03/9578425.html
-Advertisement-
Play Games

前言 在上一篇博文中介紹了Vue.js的常用指令,今天總結歸納一下彈窗Dialog的使用,彈窗經常被使用在一些表單的增刪改查啊,或者彈出一些提示信息等等,在保留當前頁面狀態的情況下,告知用戶並承載相關操作。 之前做了表格的增刪改查任務,其中用到了dialog彈窗,今天總結歸納一下Vue.js中幾種彈 ...


前言

在上一篇博文中介紹了Vue.js的常用指令,今天總結歸納一下彈窗Dialog的使用,彈窗經常被使用在一些表單的增刪改查啊,或者彈出一些提示信息等等,在保留當前頁面狀態的情況下,告知用戶並承載相關操作。

之前做了表格的增刪改查任務,其中用到了dialog彈窗,今天總結歸納一下Vue.js中幾種彈窗Dialog的使用

基本用法

dialog彈出對話框

<el-button type="text" @click="dialogVisible = true">點擊打開 Dialog</el-button>

<el-dialog
  title="提示"
  :visible.sync="dialogVisible"
  width="30%"
  :before-close="handleClose">
  <span>這是一段信息</span>
  <span slot="footer" class="dialog-footer">
    <el-button @click="dialogVisible = false">取 消</el-button>
    <el-button type="primary" @click="dialogVisible = false">確 定</el-button>
  </span>
</el-dialog>
dialog彈出對話框html部分
<script>
  export default {
    data() {
      return {
        dialogVisible: false
      };
    },
    methods: {
      handleClose(done) {
        this.$confirm('確認關閉?')
          .then(_ => {
            done();
          })
          .catch(_ => {});
      }
    }
  };
</script>
dialog彈出對話框JS部分

在上面的代碼當中,一個dialog彈窗需要設置visible屬性,它接收Boolean,當為true時顯示 Dialog。Dialog 分為兩個部分:bodyfooterfooter需要具名為footerslottitle屬性用於定義標題,它是可選的,預設值為空。最後,本例還展示了before-close的用法,before-close 僅當用戶通過點擊關閉圖標或遮罩關閉 Dialog 時起效。如果你在 footer 具名 slot 里添加了用於關閉 Dialog 的按鈕,那麼可以在按鈕的點擊回調函數裡加入 before-close 的相關邏輯。

自定義彈窗內容

Dialog 組件的內容可以是任意的,甚至可以是表格或表單,下麵分別舉例嵌套表單和表格

嵌套表格

eg:

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

<el-dialog title="球員信息" :visible.sync="dialogTableVisible">
  <el-table :data="gridData">
    <el-table-column property="number" label="球衣號碼" width="150"></el-table-column>
    <el-table-column property="name" label="姓名" width="200"></el-table-column>
    <el-table-column property="position" label="所打位置"></el-table-column>
  </el-table>
</el-dialog>
dialog彈窗嵌套表格html部分
<script>
  export default {
    data() {
      return {
        gridData: [{
          number: '23',
          name: 'lebron',
          position:'SF'
        }, {
          number: '3',
          name: 'wade',
          position:'SG'
        }, {
          number: '3',
          name: 'paul',
          position:'PG'
        }, {
          number: '7',
          name: 'anthony',
          position:'SF'
        }],
        dialogTableVisible: false,
      };
    }
  };
</script>
dialog彈窗嵌套表格JS部分

嵌套表單

eg:

<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" auto-complete="off"></el-input>
    </el-form-item>
    <el-form-item label="球員位置" :label-width="formLabelWidth">
      <el-select v-model="form.number" placeholder="請選擇球員位置">
        <el-option label="組織後衛" value="PG"></el-option>
        <el-option label="得分後衛" value="SG"></el-option>
        <el-option label="小前鋒" value="SF"></el-option>
        <el-option label="大前鋒" value="PF"></el-option>
        <el-option label="中鋒" value="C"></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>
dialog彈窗嵌套表單HTML部分
<script>
  export default {
    data() {
      return {
        dialogFormVisible: false,
        form: {
          name: '',
          region: '',
        },
        formLabelWidth: '120px'
      };
    }
  };
</script>
dialog彈窗嵌套表單JS部分

嵌套的Dialog

如果需要在一個Dialog內部嵌套另外一個Dialog,則需要使用"append-to-body"屬性

eg:

<template>
  <el-button type="text" @click="outerVisible = true">點擊打開外層 Dialog</el-button>
  
  <el-dialog title="外層 Dialog" :visible.sync="outerVisible">
    <el-dialog
      width="30%"
      title="內層 Dialog"
      :visible.sync="innerVisible"
      append-to-body>
    </el-dialog>
    <div slot="footer" class="dialog-footer">
      <el-button @click="outerVisible = false">取 消</el-button>
      <el-button type="primary" @click="innerVisible = true">打開內層 Dialog</el-button>
    </div>
  </el-dialog>
</template>
嵌套Dialog之HTML部分
<script>
  export default {
    data() {
      return {
        outerVisible: false,
        innerVisible: false
      };
    }
  }
</script>
嵌套Dialog之JS部分

正常情況下,不建議使用嵌套的 Dialog,如果需要在頁面上同時顯示多個 Dialog,可以將它們平級放置。對於確實需要嵌套 Dialog 的場景,使用append-to-body屬性。如上代碼示例,將內層 Dialog 的該屬性設置為 true,它就會插入至 body 元素上,從而保證內外層 Dialog 和遮罩層級關係的正確。

居中佈局

標題和底部可水平居中

eg:

<el-button type="text" @click="centerDialogVisible = true">點擊打開 Dialog</el-button>

<el-dialog
  title="提示"
  :visible.sync="centerDialogVisible"
  width="30%"
  center>
  <span>需要註意的是內容是預設不居中的</span>
  <span slot="footer" class="dialog-footer">
    <el-button @click="centerDialogVisible = false">取 消</el-button>
    <el-button type="primary" @click="centerDialogVisible = false">確 定</el-button>
  </span>
</el-dialog>
dialog彈窗居中佈局HTML部分
<script>
  export default {
    data() {
      return {
        centerDialogVisible: false
      };
    }
  };
</script>
dialog彈窗居中佈局JS部分

Dialog 的內容是懶渲染的,即在第一次被打開之前,傳入的預設 slot 不會被渲染到 DOM 上。因此,如果需要執行 DOM 操作,或通過 ref 獲取相應組件,請在 open 事件回調中進行。

如果 visible 屬性綁定的變數位於 Vuex 的 store 內,那麼 .sync 不會正常工作。此時需要去除 .sync 修飾符,同時監聽 Dialog 的 open 和 close 事件,在事件回調中執行 Vuex 中對應的 mutation 更新 visible 屬性綁定的變數的值。

dialog彈窗(Attributes屬性總結

Dialog彈窗(Events)事件總結

 

Dialog彈窗(slot)插槽總結(插槽決定將所攜帶的內容,插入到指定的某個位置,從而使模板分塊,具有模塊化的特質和更大的重用性)

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 迄今為止,正兒八經的上線了真正意義上的程式,但是這個小程式卻著實不小。 之所以不小,是因為這個類似於社區的小程式,已經做了大部分都有的功能了 舉例說明,具體的一些功能點: 1、帖子列表頁面:會有的功能:滾動載入,下拉刷新等 2、發帖頁面:圖文發表,視頻上傳 3、評論頁面,圖文評論 4、帖子詳情 ...
  • 很奇怪,為什麼稍微低了一點就無法運行 解決辦法:npm install --save-dev @angular/cli@latest 重新安裝最新的版本 ...
  • 作為前端最火的構建工具,是前端自動化工具鏈 最重要的部分 ,使用門檻較高。本系列是筆者自己的學習記錄,比較基礎,希望通過 問題 + 解決方式 的模式,以前端構建中遇到的具體需求為出發點,學習 工具中相應的處理辦法。(本篇中的參數配置及使用方式均基於 ) 一. webpack與自動化測試 對應的關鍵詞 ...
  • 輸入url用戶按下回車鍵 主要的流程下麵這張圖已經非常清晰了。下圖主要通過Navigation Timing API在客戶端收集性能數據,並用XMLHttpRequest 或其它技術傳送到服務端。同時,該API使你可以衡量之前難以獲取的數據,如卸載前一個頁面的時間,在功能變數名稱解析上的時間,在執行load ...
  • 一、 .parse :將字元串轉為js對象;JSON.parse(str, function(key,value){}) .stringify:該方法用於將js對象轉為json字元串.使用方式:JSON.stringify(obj, fn) 二、判斷數組的四種方式: prototype constr... ...
  • 下載地址 完成後效果 ...
  • let的特性: const的特性: 凍結對象: ...
  • globalCompositeOperation即Canvas中的合成操作。 1、source-over 這是預設值,他表示繪製的圖形將畫在現有畫布之上 2、destination-over 這個操作的值與前一個值相反,所以現在目標繪製在源之上 3、source-atop 這個操作會將源繪製在目標之 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...