Vuetify定时通用警报组件

时间:2019-07-16 18:32:04

标签: javascript vue.js vuetify.js

美好的一天。我正在尝试创建一个通用警报组件,该组件会在api调用失败时显示api错误。

我试图使用settime out删除警报,但是一旦未重置超时,就会显示警报,因此它在屏幕上停留的时间会有所不同。我能够删除setTimeOut,而是让用户只需单击警报消息即可将其关闭,但是如果用户从未单击过警报消息,则消息将永远保留,这是不理想的。

我希望能够在5秒钟左右的时间内显示我的警报。

如何更改我的组件以使其在设定的时间内保持打开状态?

这里是我的代码:

我的App.vue,其中我的整个应用称为槽形路由器。它检查是否存在指示错误的状态:

<template>
  <v-app>
    <v-content>
      <div class="AppPadding">
        <router-view />
      </div>
    </v-content>
    <div>
      <errorMessages v-if="errorMessage"/>
    </div>
  </v-app>
</template>

<script>
import errorMessages from "@/components/component/errorMessages";

export default {
  name: "App",
  components: {
    errorMessages
  },
  computed: {
    errorType: function() {
      return this.$store.getters.errorType;
    },
    errorMessage: function() {
      return this.$store.getters.errorMessage;
    }
  },
  data() {
    return {
      //
    };
  }
};
</script>

<style scoped>
.AppPadding {
  padding-top: 5%;
}
</style>

这是我的错误消息组件。它会获取错误类型和消息,并保存在我的应用程序状态中,并允许用户在单击时清除错误状态,从而关闭警报组件。

<template>
  <div>
    <v-alert
      :value="errorExists"
      type="error"
      transition="slide-y-reverse-transition"
      v-model="errorMessage"
      @click="removeErrors"
    >
      {{ "ERROR: " + this.errorType + " " + this.errorMessage }}
    </v-alert>
  </div>
</template>

<script>
export default {
  computed: {
    errorType: function() {
      let value = this.$store.getters.errorType;
      if (value != undefined && value != null) {
        return this.$store.getters.errorType;
      } else {
        return "";
      }
    },
    errorMessage: function() {
      let value = this.$store.getters.errorMessage;
      if (value != undefined && value != null) {
        return this.$store.getters.errorMessage;
      } else {
        return "";
      }
    },
    errorExists: function() {
      let value = this.$store.getters.errorMessage;
      if (value != undefined && value != null) {
        return true;
      } else {
        return false;
      }
    }
  },
  methods: {
    removeErrors(){
      this.$store.dispatch('removeErrors')
      console.log('remove errors')
    }
  },

  data() {
    return {
      //
    };
  }
};
</script>

1 个答案:

答案 0 :(得分:0)

我认为在当前代码中执行此操作的最简单方法是在错误消息组件中添加mounted(),以使其在5秒钟的超时后调用IndexError方法。这是带有额外超时的代码:

removeErrors()