Snackbar Vuetify - 超时后覆盖方法

问题描述 投票:0回答:3
javascript vue.js vuejs2 vue-component vuetify.js
3个回答
8
投票

根据文档,该属性没有附加任何事件,但我将提供一个响应您的用例的解决方案,将

timeout
属性添加到您的数据对象,如下所示:

   data() {
         return {
          snackbar:false,
          timeout:6000,
          ....
         }
    }

将事件处理程序添加到您的按钮单击:

     <v-btn block
       color="primary" 
       dark
       @click="showSnackbar">
       Show Snackbar
    </v-btn>

在您的方法中添加

showSnackbar
方法

    methods: {
         showSnackbar() {
           this.snackbar=true;
           setTimeout(() => { this.$emit("yourEvent"); },this.timeout);
         }
       }

我用这支

模拟了你的情况

4
投票

您还可以使用观察者。观察

snackbar === false
,然后执行该函数。


0
投票

在超时后执行某些操作的最佳方法是使用 v-snackbar 组件提供的本机 events。在 Vuetify 2 中是

@input
,在 Vuetify3 中是
@update:modelValue
。这是一个例子:

<template>
    <v-snackbar v-model="message.status" :color="message.type" :bottom="true" :right="true" :timeout="timeout" @input="hide()">
        {{ message.text }}

        <template v-slot:action="{ attrs }">
            <v-btn class="mr-0" v-bind="attrs" text icon @click="hide">
                <v-icon color="white">mdi-close</v-icon>
            </v-btn>
        </template>
    </v-snackbar>
</template>

<script>
    import { mapGetters } from 'vuex'

    export default {
        name: 'Message',
        data() {
            return {
                timeout: 6000
            }
        },
        computed: {
            ...mapGetters(['message'])
        },
        methods: {
            hide() {
                this.$store.commit('hideMessage')
            }
        }
    }
</script>

所以,这里的

hide()
方法会在点击
close
按钮或者超时时执行。

© www.soinside.com 2019 - 2024. All rights reserved.