欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue.extend實現(xiàn)組件庫message組件示例詳解

 更新時間:2022年07月27日 15:50:47   作者:陌年微涼_  
這篇文章主要為大家介紹了Vue.extend實現(xiàn)組件庫message組件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

概述

當我們使用組件庫的時候,某些組件并不是直接放到模板當中進行使用,而是通過api的方式調用生成組件并且掛在到我們的頁面中,其中最常見的就是message組件,我們在組件庫中看到的多數(shù)都是api調用的方式生成。記錄自己基本實現(xiàn)message組件。

Vue.extend

在vue中,要實現(xiàn)通過api方式實現(xiàn)組件的使用,這個aip是必不可少的,因此我們先了解下這個全局api的用法,官網(wǎng)說的很晦澀難懂,我的理解就是通過參數(shù)傳遞一個配置對象(這個配置對象就是我們模板中export default的那個對象,例如data,methods,props等等)都可以傳遞,接下來該函數(shù)會根據(jù)我們的配置對象生成一個繼承自Vue的子組件構造函數(shù),然后我們就可以通過實例化構造函數(shù),生成對應的組件,然后我們就可以掛載到頁面了。

message 組件配置對象(就是.vue文件)

<template>
  <div
    :class="['message-box', 'message-box-' + type]"
    :style="{ top: top + 'px' }"
  >
    <header>
      <span class="close">X</span>
    </header>
    <div class="message--box-content">
      {{ message }}
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {};
  },
  props: {
    message: {
      type: String,
      default: "this is message box",
    },
    type: {
      validator(value) {
        return ["success", "error", "default"].indexOf(value) !== -1;
      },
      default: "default",
    },
    top: {
      type: Number,
      default: 20,
    },
  },
};
</script>
<style lang="less">
.message-box {
  position: fixed;
  left: 50%;
  transform: translateX(-50%);
  width: 400px;
  height: 50px;
  background-color: #ccc;
  .close {
    position: absolute;
    top: 0;
    right: 5px;
    cursor: pointer;
  }
  .message--box-content {
    line-height: 50px;
    text-indent: 2em;
  }
  &.message-box-success {
    background-color: green;
  }
  &.message-box-error {
    background-color: red;
  }
  &.message-box-default {
    background-color: #eee;
  }
}
.fade-enter-active,
.fade-leave-active {
  transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
  opacity: 0;
}
</style>

message 生成組件的函數(shù)

import MessageBoxOption from "./index.vue";
import Vue from "vue";
let messageBoxConstructor = Vue.extend({
  ...MessageBoxOption,
});
export default {
  install(Vue) {
    Vue.prototype.$Message = {
      instanceList: [],
      hide(types) {
        for (let instance of this.instanceList) {
          if (instance.types == types) {
            instance &&
              document.body.removeChild(instance.$el) &&
              Reflect.deleteProperty(this, types);
          }
        }
      },
      success(message) {
        if (!this.vmSuccess) {
          let messageBox = new messageBoxConstructor({
            propsData: {
              message,
              type: "success",
              top: (this.instanceList.length + 1) * 55,
            },
          });
          let $Message = messageBox.$mount();
          this.vmSuccess = $Message;
          this.instanceList.push({ ...$Message, types: "vmSuccess" });
          document.body.appendChild($Message.$el);
          setTimeout(() => {
            this.hide("vmSuccess");
          }, 4000);
        }
      },
      error(message) {
        if (!this.vmError) {
          let messageBox = new messageBoxConstructor({
            propsData: {
              message,
              type: "error",
              top: (this.instanceList.length + 1) * 55,
            },
          });
          let $Message = messageBox.$mount();
          this.vmError = $Message;
          this.instanceList.push({ ...$Message, types: "vmError" });
          document.body.appendChild($Message.$el);
          setTimeout(() => {
            this.hide("vmError");
          }, 6000);
        }
      },
    };
  },
};

使用方法

<template>
  <div id="app">
    <button @click="handleShowMessageBox">顯示</button>
    <button @click="handleHideMessageBox">隱藏</button>
  </div>
</template>
<script>
import MessageBox from "./components/MessageBox/index.vue";
export default {
  name: "App",
  components: { MessageBox },
  methods: {
    handleShowMessageBox() {
      this.$Message.success("恭喜你,這是一條成功消息");
      this.$Message.error("sorry,這是一條失敗消息");
    },
    handleHideMessageBox() {
      this.$Message.hide();
    },
  },
};
</script>

效果圖

總結

  • 要通過js的方式通過api調用生成,關鍵在在于Vue.extend函數(shù)的使用,上面只是個簡單版本的,可以根據(jù)自己的需要,自動加以擴展。
  • 我們這種彈窗組件一般做成單例,因此點擊的時候不會重復出現(xiàn)相同類型的組件。

以上就是Vue.extend實現(xiàn)組件庫message組件示例詳解的詳細內容,更多關于Vue.extend message組件庫的資料請關注腳本之家其它相關文章!

相關文章

  • vue在取對象長度length時候出現(xiàn)undefined的解決

    vue在取對象長度length時候出現(xiàn)undefined的解決

    這篇文章主要介紹了vue在取對象長度length時候出現(xiàn)undefined的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue3+pinia用戶信息持久緩存token的問題解決

    vue3+pinia用戶信息持久緩存token的問題解決

    本文主要介紹了vue3+pinia用戶信息持久緩存token的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • 關于vue.extend的使用及說明

    關于vue.extend的使用及說明

    這篇文章主要介紹了關于vue.extend的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Vue中$set()的使用方法場景分析

    Vue中$set()的使用方法場景分析

    由于 Vue 會在初始化實例時進行雙向數(shù)據(jù)綁定,使用Object.defineProperty()對屬性遍歷添加 getter/setter 方法,所以屬性必須在 data 對象上存在時才能進行上述過程 ,這樣才能讓它是響應的,這篇文章主要介紹了Vue中$set()的使用方法場景分析,需要的朋友可以參考下
    2023-02-02
  • vue3實現(xiàn)CSS無限無縫滾動效果

    vue3實現(xiàn)CSS無限無縫滾動效果

    這篇文章主要為大家詳細介紹了vue3實現(xiàn)CSS無限無縫滾動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 詳解Vue CLI3 多頁應用實踐和源碼設計

    詳解Vue CLI3 多頁應用實踐和源碼設計

    這篇文章主要介紹了詳解Vue CLI3 多頁應用實踐和源碼設計,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • wepy--用vantUI 實現(xiàn)上彈列表并選擇相應的值操作

    wepy--用vantUI 實現(xiàn)上彈列表并選擇相應的值操作

    這篇文章主要介紹了wepy--用vantUI 實現(xiàn)上彈列表并選擇相應的值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • vue中實現(xiàn)移動端的scroll滾動方法

    vue中實現(xiàn)移動端的scroll滾動方法

    下面小編就為大家分享一篇vue中實現(xiàn)移動端的scroll滾動方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 深入探討Vue3實現(xiàn)多數(shù)據(jù)變化監(jiān)聽的方式

    深入探討Vue3實現(xiàn)多數(shù)據(jù)變化監(jiān)聽的方式

    隨著 Vue 3 的發(fā)布,框架帶來了更多的新特性和增強,其中之一就是 watch 函數(shù)的升級,這一改進使得多個數(shù)據(jù)的變化偵聽更加優(yōu)雅和靈活,本文將深入探討 Vue 3 中的 watch 函數(shù),以及如何以更加優(yōu)雅的方式實現(xiàn)對多個數(shù)據(jù)變化的監(jiān)聽
    2023-08-08
  • el-table表頭添加勾選框的實現(xiàn)示例

    el-table表頭添加勾選框的實現(xiàn)示例

    本文主要介紹了el-table表頭添加勾選框的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01

最新評論