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

vue3實現(xiàn)alert自定義的plugins方式

 更新時間:2024年08月29日 09:50:21   作者:zhooson  
這篇文章主要介紹了vue3實現(xiàn)alert自定義的plugins方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

vue3實現(xiàn)alert自定義的plugins

技術(shù)環(huán)境:

vue3實現(xiàn)一個alert的plugins

代碼目錄如下:

1. plugins/Message/index.vue

<template>
  <div class="default-message">
    <div class="default-message-content">
      <div class="default-message-title">{{title}}</div>
      <div class="default-message-value" v-html="content"></div>
      <div class="default-message-btns">
        <div class="default-message-cancle default-message-btn"
          v-if="cancleText" :style="setCancleColor()"
          @click.prevent.stop="handleCancel">
          {{cancleText}}
        </div>
        <div class="default-message-submit default-message-btn"
          :style="setOkColor()" @click.prevent.stop="handleOk">
          {{okText}}
        </div>
      </div>
    </div>
  </div>
</template>
<script>
import { defineComponent } from "vue";
export default defineComponent({
  name: "Message",
  props: {
    // 標(biāo)題
    title: {
      type: String,
      default: "提示",
    },
    // 內(nèi)容
    content: {
      type: String,
      default: "",
      required: true,
    },
    // 確定按鈕文字
    okText: {
      type: String,
      default: "確定",
    },
    // 確定按鈕文字顏色
    okTextColor: {
      type: String,
      default: "#26a2ff",
    },
    // 取消按鈕文字
    cancleText: {
      type: String,
      default: "",
    },
    // 取消按鈕文字顏色
    cancleTextColor: {
      type: String,
      default: "#999",
    },
    // 成功回調(diào)
    success: {
      type: Function,
    },
    // 失敗回調(diào)
    fail: {
      type: Function,
    },
  },
  setup(props) {
    // ok的顏色
    const setOkColor = () => {
      return `color: ${props.okTextColor}`;
    };
    // 取消的顏色
    const setCancleColor = () => {
      return `color: ${props.cancleTextColor}`;
    };

    // 移除當(dāng)前組件
    function removeModal() {
      const modelDom = document.body.querySelector(
        `.__default__container__message__`
      );
      if (modelDom) {
        document.body.removeChild(modelDom);
      }
    }

    const handleCancel = () => {
      removeModal();
      props.fail && props.fail();
    };

    const handleOk = () => {
      removeModal();
      props.success && props.success();
    };

    return {
      setOkColor,
      setCancleColor,

      handleOk,
      handleCancel,
    };
  },
});
</script>
<style scoped lang="scss">
.default-message {
  position: fixed;
  right: 0;
  top: 0;
  bottom: 0;
  left: 0;
  z-index: 1000;
  background: rgba($color: #000000, $alpha: 0.3);

  .default-message-title {
    padding-top: 15px;
    text-align: center;
    font-size: 18px;
    font-weight: 700;
    color: #333;
  }

  .default-message-content {
    width: 85%;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate3d(-50%, -50%, 0);
    background-color: #fff;
    border-radius: 6px;
    transition: all 0.2s ease-in;
    color: #999;
    font-size: 18px;
  }

  .default-message-value {
    padding: 10px 20px 15px;
    min-height: 36px;
    position: relative;
    color: #999;
    text-align: center;
    line-height: 36px;
  }
  .default-message-btns {
    // border-top: 1px solid #ddd;
    display: flex;
    height: 46px;
    position: relative;
    &:after {
      position: absolute;
      content: "";
      display: inline-block;
      left: 0;
      right: 0;
      top: 0;
      height: 1px;
      transform: scaleY(0.5);
      background: #ddd;
    }
    .default-message-btn {
      flex: 1;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 16px;
      padding: 0 3px;
    }
    .default-message-cancle {
      position: relative;
      &:after {
        position: absolute;
        content: "";
        display: inline-block;
        top: 0;
        right: 0;
        bottom: 0;
        width: 1px;
        transform: scaleX(0.5);
        background: #ddd;
      }
    }
  }
  @keyframes fadeIn {
    from {
      opacity: 0;
    }
    to {
      opacity: 1;
    }
  }
}
</style>

2. plugins/Message/index.js

import { createVNode, render } from "vue";
import MessageConstructor from "./index.vue";

const $message = function(options) {
  // 創(chuàng)建div
  const container = document.createElement("div");
  container.className = `__default__container__message__`;
  //創(chuàng)建虛擬節(jié)點
  const vm = createVNode(MessageConstructor, options);
  //渲染虛擬節(jié)點
  render(vm, container);
  document.body.appendChild(container);
};

export default {
  //組件注冊
  install(app) {
    app.config.globalProperties.$message = $message;
  }
};

3. main.js

import { createApp } from "vue";
import router from "./router";
import store from "./store";
import App from "./App.vue";

import Message from "./assets/plugins/Message";

const app = createApp(App);

app.use(Message);

app.use(store);
app.use(router);
app.mount("#app", { username: "123 });

4. 使用方法

import { getCurrentInstance } from "vue";
setup(props) {
	const { ctx } = getCurrentInstance();
	
	  ctx.$message({
        content: "您確定要退出嗎?",
        cancleText: "取消",
        success: (res) => {
          	console.log(res);
        },
        fail: (err) => {
			console.log(err);
		},
      });
}

5. 升級改造

由于當(dāng)前 ctx.$message 僅僅只在setup里面使用, 如果希望在unit.js或者其他js文件中使用? 下面開始我的表演

  • 5.1 js文件中需要使用vue的app實例對象
// main.js
export const app = createApp(App);
  • 5.2 js文件引入app實例
// util.js
import { app } from "../../main";

/**
 * @params title String
 * @params content String
 * @params okText String
 * @params okTextColor String
 * @params cancleText String
 * @params cancleTextColor String
 * @return promise
 */
export function showMessage(params) {
  return new Promise((resolve, reject) => {
    app.config.globalProperties.$message({
      ...params,
      success: () => {
        return resolve("is:ok");
      },
      fail: () => {
        return reject("is:cancle");
      }
    });
  });
}
  • 5.3 使用方法
import { showMessage } from "../../assets/scripts/util";
setup(){
	 const logout = () => {
      showMessage({ content: "您確定要退出嗎?", cancleText: "取消" })
        .then((res) => {
          console.log(res);
        })
        .catch((err) => {
          console.log(err);
        });
    };
   return { logout };
}

文檔說明:

字段說明requiredtype默認(rèn)
title標(biāo)題falsestring提示
content內(nèi)容truestring
okText確定按鈕文字falsestring確定
okTextColor確定按鈕文字顏色falsestring#26a2ff
cancleText取消按鈕文字falsestring
cancleTextColor取消按鈕文字顏色falsestring#999
success成功回調(diào)falseFunction
fail失敗回調(diào)falseFunction

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于Vue3+Node.js實現(xiàn)大文件上傳功能

    基于Vue3+Node.js實現(xiàn)大文件上傳功能

    在 2025 年的 Web 開發(fā)浪潮中,大文件上傳已成為云存儲,視頻平臺和多媒體應(yīng)用的剛需,本文我們就來使用 Vue?3 前端配合 Node.js 后端構(gòu)建一個支持秒傳和續(xù)傳的大文件上傳系統(tǒng)吧
    2025-07-07
  • MVVM與MVC的區(qū)別及應(yīng)用場景介紹

    MVVM與MVC的區(qū)別及應(yīng)用場景介紹

    文章對比了MVC與MVVM架構(gòu),指出MVC通過Controller單向驅(qū)動數(shù)據(jù)流,適合傳統(tǒng)Web和桌面應(yīng)用;MVVM利用雙向數(shù)據(jù)綁定自動同步,更適用于現(xiàn)代SPA和數(shù)據(jù)密集型前端開發(fā),推薦根據(jù)項目規(guī)模、團(tuán)隊技術(shù)棧和維護(hù)需求選擇模式,核心目標(biāo)均為實現(xiàn)關(guān)注點分離
    2025-08-08
  • Element-ui 自帶的兩種遠(yuǎn)程搜索(模糊查詢)用法講解

    Element-ui 自帶的兩種遠(yuǎn)程搜索(模糊查詢)用法講解

    這篇文章主要介紹了Element-ui 自帶的兩種遠(yuǎn)程搜索(模糊查詢)用法講解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Element的Pagination分頁sync問題小結(jié)

    Element的Pagination分頁sync問題小結(jié)

    本文主要介紹了Element的Pagination分頁sync問題小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • VUE3?Vite打包后動態(tài)圖片資源不顯示問題解決方法

    VUE3?Vite打包后動態(tài)圖片資源不顯示問題解決方法

    這篇文章主要給大家介紹了關(guān)于VUE3?Vite打包后動態(tài)圖片資源不顯示問題的解決方法,可能是因為在部署后的服務(wù)器環(huán)境中對中文文件名的支持不完善,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • vue3?typescript封裝axios過程示例

    vue3?typescript封裝axios過程示例

    這篇文章主要為大家介紹了vue3?typescript封裝axios過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • vue子傳父關(guān)于.sync與$emit的實現(xiàn)

    vue子傳父關(guān)于.sync與$emit的實現(xiàn)

    這篇文章主要介紹了vue子傳父關(guān)于.sync與$emit的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Vue如何實現(xiàn)自動觸發(fā)功能

    Vue如何實現(xiàn)自動觸發(fā)功能

    這篇文章主要介紹了Vue如何實現(xiàn)自動觸發(fā)功能,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • ???????基于el-table和el-pagination實現(xiàn)數(shù)據(jù)的分頁效果

    ???????基于el-table和el-pagination實現(xiàn)數(shù)據(jù)的分頁效果

    本文主要介紹了???????基于el-table和el-pagination實現(xiàn)數(shù)據(jù)的分頁效果,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Vue模仿ElementUI的form表單實例代碼

    Vue模仿ElementUI的form表單實例代碼

    這篇文章主要給大家介紹了關(guān)于Vue模仿ElementUI的form表單的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評論

南川市| 汨罗市| 汉沽区| 电白县| 临泉县| 东丰县| 凤山县| 南通市| 东港市| 阳山县| 大石桥市| 梨树县| 天柱县| 漠河县| 科尔| 丰镇市| 忻城县| 伊宁县| 鹰潭市| 阿克| 柘城县| 崇州市| 南部县| 卓尼县| 灌南县| 东光县| 山西省| 扎鲁特旗| 工布江达县| 辉南县| 桃园县| 金山区| 岳阳市| 通河县| 安达市| 环江| 中方县| 西吉县| 青铜峡市| 仪陇县| 澎湖县|