vue--vant組件庫Dialog彈出框

安裝vant UI框架:javascript

cnpm install vant –-save-dev

導入組件-在main.js裏:css

import Vant from 'vant'; import'vant/lib/vant-css/index.css'; Vue.use('Vant')

Dialog彈出框咱們並不陌生,項目中的活動規則啊,登陸註冊啊,分享啊等等都會使用到彈出框vue

彈出框和toast的區別是不能自動消失,由於每每彈出框裏的內容比較多,甚至有些更復雜的交互java

好比登陸等,因此須要手動關閉,天然它就會有交互的按鈕等npm

準備工做:api

 建立一個頁面: Dialog.vue框架

 

在router.js裏配置 Dialog頁面的路由函數

 

{ path: '/dialog', name: 'dialog', component: () => import('./views/Dialog.vue') } 

在index.vue裏添加一項post

<a href="javascript:void(0)" @click="$router.push('/dialog')">
         <van-col span="6" class="marb20">
            <van-icon name="pending-deliver" />
            <div>Dialog 彈出框</div>
         </van-col>
</a>

代碼演示Diaglog 彈出框:this

Dialog組件支持函數調用和組件調兩種方式:

函數調用:顧名思議就是直接一個方法就能夠將彈出框展現出來,不須要其它任何操做,是比較基礎的應用

組件調用:以組件的形式調用,須要在DOM裏插入<van-dialog>標籤,是一種比較高級的用法,一般會伴隨着比較複雜的交互

這節首先講下比較基礎的方法:函數調用Dialog

 DOM裏建立一個按鈕,來觸發彈出框的顯示

<van-button type="primary" @click="onClick">彈出</van-button>

咱們在項目開發的時候,遇到的最簡單的彈出框就是內容,確認按鈕還有蒙層三個元素

蒙層默認狀況都是加上去的,確認按鈕也是

須要說明的一點是,在咱們安裝上vant框架的時候,$dialog會自動掛載到Vue的prototype上,因此直接調用就能夠,這點跟toast同樣

this.$dialog.alert({ message: "hello world", })

咱們還能夠給它多作些點綴,好比加個title啊,加個取消按鈕啊

若是仍是延用$dialog.alert這個方法添加了「取消按鈕」的設置,還須要加上catch(),不然點擊取消時會報錯

this.$dialog.alert({ title: "Hello World!", //加上標題
         message: "hello world", //改變彈出框的內容
         showCancelButton: true //展現取水按鈕
}) .then(() => { //點擊確認按鈕後的調用
         console.log("點擊了確認按鈕噢") }) .catch(() => { //點擊取消按鈕後的調用
         console.log("點擊了取消按鈕噢") })

實現上圖的效果其實還有一種更簡單的方式,這種方式不須要設置「顯示取消按鈕」

是能夠自動顯示出來的,這個方法就是使用$dialog.confirm()

this.$dialog.confirm({ title: "hello", message: "hello world", confirmButtonText: "你好", //改變確認按鈕上顯示的文字
         cancelButtonText: "你壞" //改變取消按鈕上顯示的文字
}).then(()=> { console.log("點擊了確認按鈕噢") }).catch(() => { console.log("點擊了取消按鈕噢") })

還有一些其它比較有用的option選項

overlay:是否顯示蒙層,默認都是開啓的,通常不用去理會

closeOnClickOverlay:點擊蒙層時是否關閉彈框。默認是關閉的

但若是咱們只有一個按鈕且不須要有其它交互時,咱們通常是將這個設置開啓,這樣用戶體驗較好

lockScroll:是否鎖定背景滾動。默認都是禁止背景滾動的

beforeClose:關閉前的回調函數,咱們在下節課會具體用到

 

代碼演示Dialog彈出框的登陸交互:

需求介紹:

點擊「登陸」按鈕後,彈出Dialog彈出框-即登陸頁面

頁面裏咱們輸入用戶名和密碼後,請求接口返回200數據,表示登陸成功,關閉彈出框

需求分析:

1.建立登陸按鈕

2.建立Dialog彈出框組件

3.點擊「登陸」後,彈出框的交互

4.建立接口

5.請求後返回數據

6.成功登陸關閉彈出框

實操咱們的需求:

建立登陸按鈕和建立Dialog彈出框組件:

<van-button type="primary" @click="onClick">登陸</van-button>
<van-dialog v-model="isShow" show-cancel-button :beforeClose="beforeClose"
>
   <van-field v-model="userName" label="用戶名" placeholder="請輸入姓名"
   />
   <van-field v-model="userPass" label="密碼" placeholder="請輸入密碼"
   />
</van-dialog>

van-field是一個輸入框的組件,即爲DOM裏的input,這也會在之後的章節中作詳細介紹,這裏不作過多介紹,知道是什麼就能夠了。

beforeClose:至關於一個鉤子函數,會在關閉以前執行一些操做。後面的beforeClose是一個函數。會有兩個參數,action, don。

action是點擊的目標的名稱,若是點擊了"確認"按鈕,則action爲confirm;

若是點擊了"取消"按鈕,則action爲cancel。

done是執行關閉的操做。

confirm: 當點擊確認按鈕時的事件。

點擊「登陸」後,彈出框展現。這個比較好實現,只要改變isShow的值就能夠實現效果:

onClick() { this.isShow = !this.isShow }

在mock.js裏建立接口

將這個接口設定爲「/login/api」,咱們還須要在這個接口裏接收用戶名和密碼兩個參數,這兩個參數是用options來接收

接收過來的數據是字符串格式的,咱們須要用JSON.parse將接收的數據轉換成JSON對象,咱們才能夠對其進行判斷等操做

過多的操做在這裏不作擴展,只簡單判斷傳輸過來的數據是否有值,若是有值則返回status: 200

const _res = function(options) { console.log(options.body) let name = JSON.parse(options.body).userName let pass = JSON.parse(options.body).userPass if(name && pass) { return {status: 200} } } Mock.mock('/login/api', 'post', _res)

請求後根據返回的數據執行操做

beforeClose(action, done) { if(!this.userName || !this.userPass) { this.$toast("請輸入用戶名和密碼") done(false) //不關閉彈框
 } if(action === 'confirm') { setTimeout(done, 1000) console.log() } else if(action === 'cancel') { done() //關閉
 } }

當點擊「確認」按鈕時,發送請求,請求回來的數據爲200時,提示成功而且關閉彈出框

組件中若是屬性值是布爾值,則其在組件裏賦值須要綁定上,即須要加上":"

事件和方法的區別:事件是觸發的行爲,如同click等,展現在DOM標籤裏,便是「=」左邊的內容

方法是實現某一具體目的的操做,即爲"="右面的內容,也就是寫在methods裏的內容

原文連接:https://mp.weixin.qq.com/s/LqFbnf5IDeNt6aBINPFlkw

相關文章
相關標籤/搜索