nuxt实现全局toast组件

目标

this.$Toast('全局toast',1500);

组件封装

<!-- Toast全局组件 toast.vue -->
<template>
    <div v-show="toast && title" class="toast-all">
        <span class="toast-all-title" v-html="title"></span>
    </div>
</template>

<script>
export default {
    name: 'Toast',
    data() {
        return {
            title: '',
            toast: false
        }
    }
}
</script>

<style lang="scss" scoped>
.toast-all {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
    background: rgba(0,0,0,0.8);
    border-radius: 8px;
    padding: 8px 12px;
    box-sizing: border-box;
    dispaly: flex;
    justify-content: center;
    align-items: center;
    z-index: 99;
    &-title {
        font-size: 14px;
        font-weight: 400;
        color: #ffffff;
        line-height: 20px;
    }
}
</style>

plugins配置(在目录plugins下建toast.js)

// toast.js
import Toast from '@/components/global/toast.vue';// 引入先前写好的vue
import Vue from 'vue';

// 注册Toast
// 生成一个Vue的子类
const ToastConstructor = Vue.extend(Toast);
// 生成一个该子类的实例
const instance = new ToastConstructor();

// 将这个实例挂载在我创建的div上
// 并将此div加入全局挂载点内部
instance.$mount(document.createElement('div'));
document.body.appendChild(instance.$el);

// 通过Vue的原型注册一个方法
// 让所有实例共享这个方法 <br>    // 其中的duration是持续时间
Vue.prototype.$Toast = (title, duration = 2000) => {
    instance.title = title;
    instance.toast = true;
    setTimeout(() => {
        instance.toast = false;
    }, duration);
};


nuxt.config.js下配置plugins

<!-- nuxt.config.js -->
plugins: [
    //  将在plugins下配置的toast.js在此处引用
    {
        src: '~/plugins/toast',
        ssr: false
    }
],
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容