// 在组件文件建一个notice文件,文件中包含index.j, notice.vue
index.js
import Vue from 'vue'
const NoticeConstructor = Vue.extend(require('./notice.vue').default)
let nId = 1;
const Notice = (option) => {
let id = 'notice-' + nId++
const NoticeInstance = new NoticeConstructor({
data: {
content: option.message,
type: option.type
}
}) // 实例化一个带有content内容的Notice
NoticeInstance.id = id
NoticeInstance.$mount() // 挂载但是并未插入dom,是一个完整的Vue实例
NoticeInstance.visible = true
let noticeDom = NoticeInstance.$el
document.body.appendChild(noticeDom) // 将dom插入body
NoticeInstance.$el.style.zIndex = nId + 10000
return NoticeInstance
}
export default {
install: Vue => {
Vue.prototype.$notice = Notice
}
}
notice.vue
<template>
<transition name="message-fade">
<div :class="['message', 'notice-'+type]" v-show="visible">
<i :class="'el-icon-'+type"></i>
<div :class="['content', 'content-'+type]">{{content}}</div>
</div>
</transition>
</template>
<script>
export default {
data () {
return {
content: '',
duration: 1000,
visible: false,
type: 'info',//'success','warning','error'
hasClose: false,
noticeTimer: null,
}
},
mounted () {
this.close()
},
methods: {
close () {
setTimeout(() => {
this.visible = false
setTimeout(() => {
this.$destroy(true)
this.$el.parentNode.removeChild(this.$el)
}, 800)
}, this.duration);
}
}
}
</script>
<style scoped lang="scss">
.message {
position: absolute;
top: 12vh;
left: 50%;
padding: 20px 30px;
border-radius: 8px;
background-color: #fff;
transform: translateX(-50%);
transition: opacity 0.3s, transform 0.4s;
font-size: 30px;
}
.content {
display: inline-block;
margin-left: 12px;
min-width: 380px;
}
/* .#2ed573 */
.notice-success {
background-color: #f0f9eb;
border-color: #e1f3d8;
}
.el-icon-success, .content-success {
color: #67c23a;
}
.notice-warning {
background-color: #fdf6ec;
border-color: #faecd8;
}
.notice-warning .content-warning {
color: #e6a23c;
}
.notice-error {
background-color: #fef0f0;
border-color: #fde2e2;
}
.notice-error .content-error {
color: #f56c6c;
}
// donghua
.message-fade-enter,
.message-fade-leave-to {
opacity: 0;
transform: translateX(-50%) translateY(-12vh);
}
.message-fade-enter-to,
.message-fade-leave {
opacity: 1;
transform: translateX(-50%) translateY(0px);
}
.message-fade-enter-active {
transition: all .5s ease;
}
.message-fade-leave-active {
transition: all .5s cubic-bezier(1.0, 0.2, 0.8, 1.0);
}
</style>
在main.jsimport Notice from '@/components/notice'
//这个是index.jsVue.use(Notice)
这样就可以在任何vue文件中引用了
this.$notice({
message: '提交成功!',
type: 'success'
});
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。