亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

UI組件庫中有一類特別的“組件”,它們的用法和普通的組件有區別,也有自己很明顯的特點。

用法上,比較簡單,不需要和普通組件一樣需要引入-注冊-寫標簽,而是可以隨時隨地,直接通過類似 this.$***() 這樣的形式。

另外明顯的一個特點就是,這類組件很常用,結構比較簡單,所以常見的一些對話框,通知條之類的都會封裝成插件,下面就一起來實現一個簡單的消息提示插件吧。

一、先說說用法

// 方式1
this.$message("這是一個提示信息");

// 方式2,根據 Bulma 的支持情況,我們支持 8 種不同樣式的 Message,'dark', 'primary', 'link', 'info', 'success', 'warning', 'danger'
this.$message.success("這是一個成功提示");

// 方式3
this.$message({
  type: "danger",
  content: "操作失敗了",
});

上面是該插件的三種使用方式,需要我們在實現插件功能的時候考慮到

二、組件結構

這里我們采用和 Element 不同的實現思路,如果你也研究過 Element 源碼的話,會發現對 Message 盒子位置的計算比較麻煩(通過定位的方式),而且每次有 Message 盒子消失都要重新計算相關其它盒子的位置。

這里,我的思路是設置一個父盒子,定位到合適的位置(頁面水平居中,依次垂直排列),每一個 Message 盒子都沒有定位,用 margin 設置盒子之間的距離,一旦有盒子消失,根據瀏覽器文檔流的規則,其它相關盒子都會自己填充剩下的位置,而不需要其它操作。

<template>
  <article class="message" :class="[type?'is-'+type:'']">
    <div class="message-body">{{content}}</div>
</article>
</template>

上面是 Message 組件的結構和樣式,由 Bulma 提供,不解釋

組件還要處理的事項:

  1. 設置父盒子樣式,因其被動態生成并追加到頁面,組件內 <style> 不加 scoped
  2. 設置定時器,并按時回調 remove() 從頁面刪除相關節點

三、封裝組件成插件

import Vue from 'vue'
import Message from './Message'

const MessageConstructor = Vue.extend(Message)
let messageWrApper = null

const ZxMessage = {
  install(options, type) {

    if (typeof options == 'function') return

    if (typeof options == 'string') {
      options = {
        content: options
      }
      if (type) {
        options.type = type
      }
    }

    options.remove = function (comp) {
      messageWrapper.removeChild(comp.$el)
      if (messageWrapper.children.length == 0) {
        document.body.removeChild(messageWrapper)
        messageWrapper = null
      }
    }

    let instance = new MessageConstructor({
      data: options
    }).$mount()

    if (!messageWrapper) {
      messageWrapper = document.createElement('div')
      messageWrapper.className = 'zx-message-wrapper'
      document.body.appendChild(messageWrapper)
    }
    messageWrapper.appendChild(instance.$el)
  }
}

Vue.prototype.$message = ZxMessage.install;

['dark', 'primary', 'link', 'info', 'success', 'warning', 'danger'].forEach(type => {
  Vue.prototype.$message[type] = content => {
    return Vue.prototype.$message(content, type)
  }
})

export default ZxMessage

提示:

  1. 處理初始情況
  2. 組件狀態覆蓋合并
  3. 無 Message 盒子時,父盒子的處理
  4. 保證父盒子唯一
  5. 多種類型 Message 支持
  6. 3種調用方式支持

具體過程分享的時候已經很清楚的說了,還有不清楚的地方找組長或者找我吧

祝編程愉快!

END

分享到:
標簽:組件 UI
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定