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

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

vue從零實現一個消息通知組件的方法詳解

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

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

利用vue從零實現一個消息通知組件

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

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

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

文件目錄的組件

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

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

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

notification.vue

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

<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中的內容插入dom節點中去 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組件實現注冊,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從零實現一個消息通知組件的方法詳解

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

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日日夜夜免费精品| 国产精品毛片久久| 亚洲一区激情| 亚洲美洲欧洲综合国产一区| 欧美特黄一级| 中日韩男男gay无套| 亚洲一区二区免费看| 999久久久国产精品| 99视频精品全国免费| 精品一区在线| 男女性色大片免费观看一区二区| 亚洲视频二区| 欧美午夜三级| 麻豆91精品视频| 日韩理论片av| 亚洲国产不卡| 亚洲一区二区三区久久久| 亚洲一级大片| 国产欧美日韩精品一区二区免费| 国产高清精品二区| 精品久久久网| 亚洲www啪成人一区二区| 久久婷婷一区| 亚洲欧美日韩国产一区二区| 少妇精品久久久| 欧美国产不卡| 久久要要av| 综合视频一区| 老司机免费视频一区二区| 日韩中文影院| 蜜臀久久99精品久久久久宅男| 日本99精品| 欧美1区二区| 久久久久中文| 深夜日韩欧美| 国产一区二区三区黄网站| 免费观看久久av| 四虎精品永久免费| 久久97久久97精品免视看秋霞| 久久久久国产精品一区二区| 亚洲三级观看| 精品国产三区在线| 婷婷久久一区| 97久久超碰| 日韩一区二区中文| 亚洲精品无播放器在线播放| 精品日韩在线| 另类av一区二区| 精品国产a一区二区三区v免费| 黄色亚洲精品| 久久精品国产福利| 麻豆精品网站| 久久不卡日韩美女| 亚洲激精日韩激精欧美精品| 国产精品亚洲片在线播放| 亚洲一本视频| 麻豆精品99| 亚洲欧美日韩精品一区二区| 免费在线亚洲欧美| 亚洲中字黄色| 久久久久久网| 日韩av二区在线播放| 久久国产日本精品| 国产精品久久久久久久免费软件| 亚洲激情中文| 精品欠久久久中文字幕加勒比| 亚洲一区有码| 裤袜国产欧美精品一区| 亚洲精品无播放器在线播放| 日本午夜大片a在线观看| 日韩中文字幕视频网| 日韩在线观看一区| 日韩一区二区三区在线看| 蜜桃成人精品| 国产精品蜜月aⅴ在线| 日韩视频中文| 在线看片国产福利你懂的| 国产调教一区二区三区| 噜噜噜久久亚洲精品国产品小说| 成人日韩在线观看| 久久久久黄色| 欧美视频久久| 欧美在线亚洲| 国产成人黄色| 国产精品亚洲综合久久| 丝袜脚交一区二区| 91精品一区国产高清在线gif| 精品日韩一区| 国产精品久久国产愉拍| 在线国产精品一区| 中文日韩欧美| 91精品一区国产高清在线gif | 日韩电影在线视频| 国产精区一区二区| 一区二区精彩视频| 黑丝一区二区三区| 亚洲黄色网址| 麻豆国产91在线播放| 日韩国产91| 天堂av在线一区| 国精品一区二区三区| 97精品国产一区二区三区| 国产无遮挡裸体免费久久| 天堂久久av| 蜜桃视频一区二区| 亚洲欧美日韩在线观看a三区| 亚洲午夜视频| 久久久久国产精品一区二区| 日韩电影在线视频| 中文在线资源| 精品国产中文字幕第一页| 日韩激情中文字幕| 中文无码日韩欧| 免费在线看一区| 美国三级日本三级久久99 | 国产精品日本一区二区不卡视频| 亚洲a成人v| 日本久久一区| 亚洲深夜av| 在线观看免费一区二区| 久久精品亚洲人成影院| 亚洲精品永久免费视频| 成人国产精品久久| 国产一区二区三区黄网站| 国产不卡一区| 超碰超碰人人人人精品| 免费一二一二在线视频 | 精品少妇av| 国产高潮在线| 久久久久久网| 女生影院久久| 久久精品卡一| 天堂资源在线亚洲| 欧美/亚洲一区| 亚洲二区三区不卡| 乱人伦精品视频在线观看| 亚洲一区二区小说| 欧美在线看片| 欧美激情一区| 国产一区二区三区精品在线观看| 都市激情国产精品| 欧美午夜精彩| 免费看欧美美女黄的网站| 日韩亚洲精品在线观看| 国产日韩三级| 国产一区二区精品久| 97精品国产| 激情欧美日韩一区| 一级成人国产| 国产精品成人3p一区二区三区| 国产一区二区三区不卡视频网站 | 91九色精品| 亚洲精品观看| 国产精品a级| 老司机精品视频网| 久久激情婷婷| 在线观看视频免费一区二区三区| 国产欧美日韩免费观看| 国产在线观看91一区二区三区 | 国产成人免费av一区二区午夜| 精精国产xxxx视频在线野外| 国产国产精品| 欧美日韩一区二区国产| 成人国产精品久久| 亚洲综合三区| 日韩高清一区在线| 国产中文字幕一区二区三区| 激情综合网址| 日本欧美韩国一区三区| 久久97视频| 香蕉成人av| 中文字幕乱码亚洲无线精品一区| 欧美精品三级在线| 日本激情一区| 国产精品字幕| 日韩区欧美区| 精品网站999| 日韩视频不卡| 国产精品密蕾丝视频下载| 999精品一区| 日本成人手机在线| 久久久精品午夜少妇| 日韩不卡一二三区| 色爱综合av| 欧美亚洲tv| 不卡中文字幕| 久久精品人人| 免费人成在线不卡| 日本在线高清| 日本aⅴ精品一区二区三区| 国产精品久久久久av电视剧| 日韩欧美中文在线观看| 91精品韩国| 国产精品资源| 99在线观看免费视频精品观看| 国产欧美日韩亚洲一区二区三区| 亚洲特色特黄| 久久麻豆视频| 日韩 欧美一区二区三区| 91精品国产调教在线观看|