最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

概述

當(dāng)我們使用組件庫(kù)的時(shí)候,某些組件并不是直接放到模板當(dāng)中進(jìn)行使用,而是通過(guò)api的方式調(diào)用生成組件并且掛在到我們的頁(yè)面中,其中最常見(jiàn)的就是message組件,我們?cè)诮M件庫(kù)中看到的多數(shù)都是api調(diào)用的方式生成。記錄自己基本實(shí)現(xiàn)message組件。

Vue.extend

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

message 組件配置對(duì)象(就是.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>

效果圖

總結(jié)

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

以上就是Vue.extend實(shí)現(xiàn)組件庫(kù)message組件示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Vue.extend message組件庫(kù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vite構(gòu)建項(xiàng)目并支持微前端

    vite構(gòu)建項(xiàng)目并支持微前端

    本文主要介紹了vite構(gòu)建項(xiàng)目并支持微前端,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 詳解Vue3中的watch偵聽(tīng)器和watchEffect高級(jí)偵聽(tīng)器

    詳解Vue3中的watch偵聽(tīng)器和watchEffect高級(jí)偵聽(tīng)器

    這篇文章主要介紹了Vue3中的watch偵聽(tīng)器和watchEffect高級(jí)偵聽(tīng)器,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • Vue?mergeProps用法詳細(xì)講解

    Vue?mergeProps用法詳細(xì)講解

    這篇文章主要介紹了Vue?mergeProps用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • 簡(jiǎn)單方法實(shí)現(xiàn)Vue?無(wú)限滾動(dòng)組件示例

    簡(jiǎn)單方法實(shí)現(xiàn)Vue?無(wú)限滾動(dòng)組件示例

    這篇文章主要為大家介紹了簡(jiǎn)單方法實(shí)現(xiàn)Vue?無(wú)限滾動(dòng)組件示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • vue3+ts+vant移動(dòng)端H5項(xiàng)目搭建的實(shí)現(xiàn)步驟

    vue3+ts+vant移動(dòng)端H5項(xiàng)目搭建的實(shí)現(xiàn)步驟

    本文主要介紹了vue3+ts+vant移動(dòng)端H5項(xiàng)目搭建,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • vue3中cookie的詳細(xì)使用過(guò)程

    vue3中cookie的詳細(xì)使用過(guò)程

    近期做的項(xiàng)目比較雜,涉及到前端框架的工作,遇到了許多問(wèn)題,記錄一下這個(gè)比較棘手的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于vue3中cookie的詳細(xì)使用方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Vue2.0 多 Tab切換組件的封裝實(shí)例

    Vue2.0 多 Tab切換組件的封裝實(shí)例

    本篇文章主要介紹了Vue2.0 多 Tab切換組件的封裝實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • vue登錄頁(yè)實(shí)現(xiàn)使用cookie記住7天密碼功能的方法

    vue登錄頁(yè)實(shí)現(xiàn)使用cookie記住7天密碼功能的方法

    這篇文章主要介紹了vue登錄頁(yè)實(shí)現(xiàn)使用cookie記住7天密碼功能的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • vue開(kāi)發(fā)心得和技巧分享

    vue開(kāi)發(fā)心得和技巧分享

    這篇文章主要為大家分享了vue開(kāi)發(fā)心得和技巧,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • vue-baidu-map 進(jìn)入頁(yè)面自動(dòng)定位的解決方案(推薦)

    vue-baidu-map 進(jìn)入頁(yè)面自動(dòng)定位的解決方案(推薦)

    這篇文章主要介紹了vue-baidu-map 進(jìn)入頁(yè)面自動(dòng)定位的解決方案,需要的朋友可以參考下
    2018-04-04

最新評(píng)論

专栏| 大关县| 开江县| 巴中市| 绥化市| 安阳市| 翁源县| 安塞县| 灵寿县| 南阳市| 湘潭市| 定西市| 穆棱市| 永济市| 孟津县| 长治市| 四子王旗| 高邑县| 财经| 松江区| 广灵县| 三江| 广宁县| 奉贤区| 军事| 项城市| 贞丰县| 伊金霍洛旗| 大连市| 延安市| 调兵山市| 华亭县| 周至县| 梅州市| 三都| 永泰县| 乐至县| 沈阳市| 高唐县| 定西市| 乌拉特前旗|