日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue從零實現(xiàn)一個消息通知組件的方法詳解

瀏覽:88日期:2023-01-31 09:41:55

本文實例講述了vue從零實現(xiàn)一個消息通知組件的方法。分享給大家供大家參考,具體如下:

利用vue從零實現(xiàn)一個消息通知組件

平時,我們肯定用過類似element-ui,antd等一些UI框架,感受它們帶給我們的便利。但當我們的需求或者設計這些框架內(nèi)置的相差太大,用起來,就會覺得特別別扭,這時候,就有必要自己來重新造輪子。

重新造輪子,有幾個好處,1.所有代碼都是服務你的業(yè)務,沒有太多用不上的東西。2.代碼是由自己維護,而不是第三方,方便維護。3.提升自己的視野,讓自己站在更高的角度來看問題。

好了,那話不多說,開始我們的組件開發(fā)吧!

文件目錄的組件

工欲善其事,必先利其器,要想實現(xiàn)一個組件,一個好的目錄結構,即可以劃分職責,不同模塊處理不同的邏輯!

我的目錄結果是這樣的:vue從零實現(xiàn)一個消息通知組件的方法詳解

接下來,我們依次對notification.vue, notify.js, index.js三個文件作介紹。

notification.vue

notification.vue是一個負責消息通知組件的視覺呈現(xiàn),里面的邏輯很簡單。

<template> <transition name='fade' @after-enter='handleAfterEnter'> <div : v-show='visible'> <span class='notification__content'> {{content}} </span> <span @click='handleClose'>{{btn}}</span> </div> </transition></template><script>export default { name: ’Notification’, props: { content: { type: String, required: true }, btn: { type: String, default: ’關閉’ } }}</script><style lang='less' scoped>.fade-enter-active, .fade-leave-active{ transition: opacity 1s;}.fade-enter, .fade-leave-to{ opacity: 0;}.notification{ display: flex; background-color: #303030; color: rgba(255, 255, 255, 1); align-items: center; padding: 20px; position: fixed; min-width: 280px; box-shadow: 0 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.3); flex-wrap: wrap; transition: all 0.3s; &__content{ padding: 0; } &__btn{ color: #ff4081; padding-left: 24px; margin-left: auto; cursor: pointer; }}</style>notify.js

notify.js是一個處理消息通知組件的邏輯部分,其主要作用是暴露一個notify的方法出去。代碼如下:

import Vue from ’vue’import Notification from ’./notification’const NotificationConstructor = Vue.extend(Notification)const instances = []let seed = 1const removeInstance = (instance) => { if (!instance) return const len = instances.length const index = instances.findIndex(ins => instance.id === ins.id) instances.splice(index, 1) if (len <= 1) return const removeHeight = instance.height for (let i = index; i < len - 1; i++) { instances[i].verticalOffset = parseInt(instances[i].verticalOffset) - removeHeight - 16 }}const notify = (options = {}) => { if (Vue.prototype.$isServer) return // 獲取vue實例 let instance = new NotificationConstructor({ propsData: options, data() { return { verticalOffset: 0, timer: null, visible: false, height: 0 } }, computed: { style() { return { position: ’fixed’, right: ’20px’, bottom: `${this.verticalOffset}px` } } }, mounted() { this.createTimer() this.$el.addEventListener(’mouseenter’, () => { if (this.timer) { this.clearTimer(this.timer) } }) this.$el.addEventListener(’mouseleave’, () => { if (this.timer) { this.clearTimer(this.timer) } this.createTimer() }) }, updated() { this.height = this.$el.offsetHeight }, beforeDestroy() { this.clearTimer() }, methods: { createTimer() { this.timer = setTimeout(() => { this.visible = false document.body.removeChild(this.$el) removeInstance(this) this.$destroy() }, options.timeout || 3000) }, clearTimer() { if (this.timer) { clearTimeout(this.timer) } }, handleClose() { this.visible = false document.body.removeChild(this.$el) removeInstance(this) this.$destroy(true) }, handleAfterEnter() { // eslint-disable-next-line no-debugger this.height = this.$el.offsetHeight } } }) const id = `notification_${seed++}` instance.id = id // 生成vue中的$el instance = instance.$mount() // 將$el中的內(nèi)容插入dom節(jié)點中去 document.body.appendChild(instance.$el) instance.visible = true // eslint-disable-next-line no-unused-vars let verticalOffset = 0 instances.forEach(item => { verticalOffset += item.$el.offsetHeight + 16 }) verticalOffset += 16 instance.verticalOffset = verticalOffset instances.push(instance) return instance}export default notifyindex.js

index.js主要是對notification.vue組件實現(xiàn)注冊,notify方法的掛載。代碼如下:

import Notification from ’./notification’import notify from ’./notify’export default (Vue) => { Vue.component(Notification.name, Notification) Vue.prototype.$notify = notify}在main.js引入

import Notification from ’./components/notification’Vue.use(Notification)使用

this.$notify({ content: ’Hello’})效果

vue從零實現(xiàn)一個消息通知組件的方法詳解

希望本文所述對大家vue.js程序設計有所幫助。

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
午夜免费一区| 国产一区一一区高清不卡| 色一区二区三区四区| 精品九九久久| 日韩中文视频| 午夜在线精品偷拍| 日韩高清在线一区| 精品国产乱码久久久久久樱花| 麻豆成人综合网| 亚洲永久av| 中文日韩在线| 日本精品久久| 国产一区二区亚洲| 亚洲高清不卡| 欧美日韩国产免费观看 | 欧美日韩日本国产亚洲在线| aa亚洲婷婷| 日韩av三区| 日产精品一区二区| 一区在线免费观看| 国产日产精品_国产精品毛片| 麻豆精品蜜桃视频网站| 国产综合欧美| 日本午夜精品久久久| 国产精品国产一区| 亚洲欧美激情诱惑| 国产黄色精品| 久久五月天小说| 久久国内精品| 激情五月综合网| 国产日产高清欧美一区二区三区| 日韩欧美精品一区| 日韩欧美另类中文字幕| 成人国产综合| 亚洲丝袜美腿一区| 日韩亚洲一区在线| 日韩高清在线一区| 久久中文视频| 国产精品视频一区视频二区| 欧美69视频| 欧美激情视频一区二区三区在线播放| 91精品一区国产高清在线gif| 日韩中文字幕91| 最新中文字幕在线播放 | 亚洲国产一区二区三区在线播放| 日韩亚洲精品在线观看| 麻豆国产精品一区二区三区| 亚洲经典在线| 国产一区一一区高清不卡| 首页欧美精品中文字幕| 久久uomeier| 国产亚洲高清在线观看| 国产美女精品| 秋霞影院一区二区三区| 国产精品亚洲产品| 亚洲性视频h| 91视频一区| 国产精品探花在线观看| 亚洲欧美一级| 亚洲一级在线| 久久中文亚洲字幕| 精品黄色一级片| 欧美在线精品一区| 一区二区电影| 黑丝一区二区三区| 久久久久久久久久久妇女| 麻豆精品国产91久久久久久| 日韩欧美激情电影| 蜜桃av一区二区| 日韩一区二区久久| 日韩伦理一区| 韩国女主播一区二区三区| 久久国产日韩欧美精品| 亚洲精品在线a| 国产亚洲毛片| 黄色av一区| 午夜欧美精品| 免费观看久久av| 久久久久国产精品一区二区| 国产精品久久观看| 精品视频一区二区三区四区五区| 欧美日韩伊人| 国产亚洲精品精品国产亚洲综合| 亚洲精品福利| 中文字幕亚洲精品乱码| 国产一级一区二区| 午夜久久福利| 国产美女精品| 日韩中文字幕不卡| 六月婷婷一区| 亚洲一区二区小说| 亚洲三级毛片| 日韩精品视频一区二区三区| 天海翼精品一区二区三区| 亚洲一区欧美二区| 久久亚洲不卡| 日韩欧美四区| 国产精品草草| 国产一区二区三区视频在线| 精品视频97| 国产一区二区三区久久| 久久精品免费看| 麻豆网站免费在线观看| 成人日韩在线| 五月天综合网站| 日韩一区精品字幕| 日韩三区四区| 久久爱www.| 欧洲一区二区三区精品| 欧美成人高清| 中文字幕免费一区二区| 国产亚洲一区| 91欧美在线| 1024精品一区二区三区| 在线综合视频| 四虎国产精品免费久久| 欧美久久香蕉| 国产精品yjizz视频网| 99久久精品国产亚洲精品| 一区二区亚洲精品| 亚洲精品成人一区| 久久亚洲精精品中文字幕| 日韩精品不卡一区二区| jiujiure精品视频播放| 亚洲精品国产精品粉嫩| 久久久久伊人| 亚洲一级黄色| 欧美亚洲二区| 亚洲最新无码中文字幕久久| 午夜欧美在线| 91麻豆精品| 国产h片在线观看| 国产亚洲激情| 国产精品天堂蜜av在线播放| 天堂中文av在线资源库| 免费视频一区二区| 久久精品国产网站| 91高清一区| 国产精品手机在线播放| 久久蜜桃资源一区二区老牛| 蜜桃传媒麻豆第一区在线观看| 国产欧美一级| 国内精品福利| 国产精品久久久久久av公交车| 久久久久久久久99精品大| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品宾馆| 欧美午夜不卡| 国产精品久久久免费| 久久久噜噜噜| 日韩精品导航| 久久一区二区三区电影| 欧美亚洲综合视频| 久久精品亚洲人成影院| 日韩亚洲精品在线观看| 欧美香蕉视频| 欧美日韩亚洲一区二区三区在线| a日韩av网址| 日韩va亚洲va欧美va久久| 久久男女视频| 国产日韩欧美一区二区三区在线观看| 亚洲一级网站| 国产一区二区三区四区五区 | 日韩成人午夜精品| 欧美久久精品一级c片| 久久久亚洲欧洲日产| 在线精品亚洲| 亚洲高清久久| 欧美国产偷国产精品三区| 国产亚洲欧美日韩精品一区二区三区 | 欧美gv在线| 日本欧美久久久久免费播放网| 极品日韩av| 亚洲美女久久精品| 国产精品magnet| 日韩av网站在线观看| 亚洲综合另类| 午夜国产一区二区| 色在线中文字幕| 久久女人天堂| 清纯唯美亚洲综合一区| 黄色亚洲在线| 一本大道色婷婷在线| 久久av电影| 欧美在线看片| 亚洲久草在线| 视频一区二区欧美| 国产精品日本| 午夜欧美精品久久久久久久| 私拍精品福利视频在线一区| 老牛影视精品| 日韩av片子| 国产一区日韩| 激情中国色综合| 乱一区二区av| 精品视频一区二区三区在线观看 | 性欧美xxxx免费岛国不卡电影| 91日韩免费| 超碰在线99| 日韩国产综合|