成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

用Vue.extend寫一個全局使用的Alert

CarterLi / 948人閱讀

摘要:由于項(xiàng)目中經(jīng)常會用到這種組件,平常都是全局注冊標(biāo)簽,使用時引入,比較繁瑣借鑒別人這種組件一般是在中被調(diào)用,中組件主要是使用了標(biāo)簽的形式,現(xiàn)記錄通過實(shí)現(xiàn)的動態(tài)組件官方文檔項(xiàng)目預(yù)覽彈窗組件開發(fā)項(xiàng)目目錄部分部分移除

由于項(xiàng)目中經(jīng)常會用到alert這種組件,平常都是全局注冊標(biāo)簽,使用時引入,比較繁瑣;

借鑒別人這種組件一般是在js中被調(diào)用,vue中組件主要是使用了標(biāo)簽的形式,
現(xiàn)記錄通過Vue.extend實(shí)現(xiàn)的動態(tài)組件;
Vue-extend官方文檔

項(xiàng)目預(yù)覽

Alert開發(fā)

項(xiàng)目目錄

components

alert

alert.vue

index.js

HelloWord.vue

main.js

alert.vue

template部分

JavaScript部分

export default {
  name: "alert",
  data () {
    return {
      message: "this a alert",
      btns: [
        {
          text: "yes",
          click: () => console.log("yes")
        },
        {
          text: "no",
          click: () => console.log("yes")
        }
      ]
    };
  },
  methods: {
    clickFn (event, btn) {
      this.$el.remove(); // 移除DOM
      const {
        click = () => console.warn("請傳入回調(diào)函數(shù)")
      } = btn;
      click(event, btn); // 傳遞回去
    }
  }
};

css部分

.shade {
  user-select: none;
  width: 100vw;
  height: 100vh;
  position: fixed;
  top: 0;
  left: 0;
  background-color: rgba(0, 0, 0, 0.03);
  z-index: 998;
  display: flex;
  align-items: center;
  justify-content: center;
}
.shade .mian {
  background: white;
  width: 80%;
  border-radius: 5px;
  overflow: hidden;
  box-shadow: 0px 0px 5px 3px rgba(0, 0, 0, 0.04);
  box-sizing: border-box;
  animation: open 0.1s;
}
.shade .mian .content {
  box-sizing: border-box;
  width: 100%;
  padding: 30px 20px;
}
.shade .mian .btns {
  height: 45px;
  box-sizing: border-box;
  border-top: 1px solid rgba(0, 0, 0, 0.1);
  display: flex;
  justify-content: space-around;
  align-items: center;
}
.shade .mian .btns .btn {
  flex: 1 0 auto;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  border-right: 1px solid rgba(0, 0, 0, 0.1);
}
.shade .mian .btns .btn:last-child {
  border-right: none;
}
.shade .mian .btns .btn:active {
  color: white;
  background-color: rgb(64, 169, 243);
}
@keyframes open {
  0%,
  100% {
    transform: scale(1);
  }
  25%,
  75% {
    transform: scale(1.04);
  }
  50% {
    transform: scale(1.06);
  }
}
index.js
import Vue from "vue";
import alert from "./alert.vue";
let MyAlertConstructor = Vue.extend(alert);
let instance;
const MyAlert = (option) => {
  // 創(chuàng)建實(shí)例并且過濾參數(shù)
  instance = new MyAlertConstructor({
    data: { ...option }
  })
  // 掛載實(shí)例
  instance.$mount();
  document.body.appendChild(instance.$el);
  return instance;
}
// 掛載到Vue原型上
Vue.prototype.$alert = MyAlert;
main.js
import "./components/alert"; // 引入注冊一下

到這里我們的Alert組件就配置完成了;

如何使用

這里我在 Helloword.vue 中測試使用;

export default {
  name: "HelloWorld",
  props: {
    msg: String
  },
  methods: {
    Alert() {
      //  使用直之前綁定到原型上的方法
      this.$alert({
        message: "你今天開心嗎?",
        btns: [
          {
            text: "開心",
            click: () => {
              // 測試是否可以拿到這邊的this
              console.log(this.msg);
            }
          },
          {
            text: "不開心",
            click: (e, btn) => {
              // 這里的event target 可能沒用 因?yàn)橐呀?jīng)移除DOM了
              // 返回btn原來本身
              console.log("不開心", e, btn);
            }
          },
          {
            text: "無回調(diào)"
            // 測試一下沒有回調(diào)函數(shù)的時候
          },
          {
            text: "幫助",
            click: this.isOK
          }
        ]
      });
    },
    isOK() {
      console.log("輸出幫助");
    }
  }};
項(xiàng)目截圖

參考文檔

Vue.extend構(gòu)造函數(shù)的使用--實(shí)現(xiàn)alert方法

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/106294.html

相關(guān)文章

  • Vue.extend法(主要于需要 動態(tài)渲染組件,或者類似于window.alert() 提示

    摘要:一簡單的使用主要用于需要動態(tài)渲染的組件,或者類似于提示組件注意創(chuàng)建的是一個組件構(gòu)造器,而不是一個具體的組件實(shí)例屬于的全局,在實(shí)際業(yè)務(wù)開發(fā)中我們很少使用,因?yàn)橄啾瘸S玫膶懛ㄊ褂貌襟E要更加繁瑣一些。 最近在重構(gòu)公司的項(xiàng)目,有些組件想要封裝的更靈活,例如toast、loading、messageBox等彈窗組件,模仿了mint-ui封裝此類組件的方式封裝了自己的彈窗組件; mint-UI的t...

    masturbator 評論0 收藏0
  • vue插件開發(fā)練習(xí)--實(shí)彈窗

    摘要:前言上回說了組件組件開發(fā)練習(xí)焦點(diǎn)圖切換的一個練習(xí)項(xiàng)目,這次換下口味,說下的插件練手的項(xiàng)目。和組件開發(fā)的目錄相比,區(qū)別就在于這個文件夾上。開發(fā)過程把項(xiàng)目跑起來首先,先弄這個組件。最后還需要一個變量,控制彈窗是否顯示。 1.前言 上回說了組件(vue組件開發(fā)練習(xí)--焦點(diǎn)圖切換)的一個練習(xí)項(xiàng)目,這次換下口味,說下vue的插件練手的項(xiàng)目。相對于現(xiàn)在之前的焦點(diǎn)圖切換的組件,這個可能就更簡單了,基...

    muzhuyu 評論0 收藏0
  • vue組件掛載到全局方法

    摘要:在最近的項(xiàng)目中,使用了來開發(fā),然而在實(shí)際的開發(fā)過程中卻發(fā)現(xiàn)這個提供的組件并不能打到我們預(yù)期的效果,像等組件每個頁面引入就得重復(fù)引入,并不像那樣可以通過來調(diào)用,那么問題來了,如何通過來調(diào)用起我們定義的組件或?qū)ξ覀兯褂玫目蚣艿慕M件呢。 在最近的項(xiàng)目中,使用了bootstrap-vue來開發(fā),然而在實(shí)際的開發(fā)過程中卻發(fā)現(xiàn)這個UI提供的組件并不能打到我們預(yù)期的效果,像alert、modal等...

    aboutU 評論0 收藏0
  • 如何實(shí)現(xiàn)全屏遮罩(附Vue.extend和el-message源碼學(xué)習(xí))

    摘要:如何優(yōu)雅的動態(tài)添加這里我們需要用到的實(shí)例化,首先我們來看的思路,貼一段源碼使用基礎(chǔ)構(gòu)造器,創(chuàng)建一個子類。因?yàn)樽鳛橐粋€的擴(kuò)展構(gòu)造器,所以基礎(chǔ)的功能還是需要保持一致,跟構(gòu)造器一樣在構(gòu)造函數(shù)中初始化。 [Vue]如何實(shí)現(xiàn)全屏遮罩(附Vue.extend和el-message源碼學(xué)習(xí)) 在做個人項(xiàng)目的時候需要做一個類似于電子相冊瀏覽的控件,實(shí)現(xiàn)過程中首先要實(shí)現(xiàn)全局遮罩,結(jié)合自己的思路并閱讀了(...

    malakashi 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<