javascript - 一旦关闭 Bootstrap vue 警报,它就不再工作了

标签 javascript vue.js bootstrap-4 bootstrap-vue

我正在尝试使用 bootstrap vue alert 构建一个全局警报组件。我正在使用 vuex store 来保持 alert 状态。

下面是我的告警组件Alert.vue

<template>
  <b-alert show :variant="variant" dismissible> {{ message }} </b-alert>
</template>
<script>
export default {
  props: {
    variant: String,
    message: String
  },
  data() {
    return {};
  },
  name: "Alert",

  methods: {},
  computed: {}
};
</script>
<style scoped></style>

下面是我的vuex商店

const alert = {
  namespaced: true,
  state: {
    variant: "",
    message: "",
    showAlert: false
  },
  getters: {
    variant: state => state.variant,
    message: state => state.message,
    showAlert: state => state.showAlert
  },
  mutations: {
    setSuccessvariant(state) {
      state.variant = "success";
    },
    setDangervariant(state) {
      state.variant = "danger";
    },
    setMessage(state, message) {
      state.message = message;
    },
    showAlert(state) {
      state.showAlert = true;
    },
    hideAlert(state) {
      state.showAlert = false;
    }
  },
  actions: {}
};

export default alert;

我在另一个组件中调用警报组件,如下所示

<alert v-if="showAlert" :message="message" :variant="variant"></alert>

showAlert 在此组件中计算为

showAlert() {
      return this.$store.getters["alert/showAlert"];
   }

这只适用于第一次。当我第一次触发它时,警报打开。单击关闭图标后,我无法取回警报。

最佳答案

show 属性替换为 v-model 以便当您单击关闭按钮时,showAlert 的值会在 vuex store 中更新:

<b-alert 
  v-model="showAlert" 
  :variant="variant" 
  dismissible
> {{ message }} 
</b-alert>

...

computed: {
  showAlert() {
    get() {
      this.$store.getters["alert/showAlert"]
    },
    set(value) {
      // MODIFY THIS MUTATION
      this.$store.commit("setShowAlert", value)
    }
  }
}

Vuex:

mutations: {
  setShowAlert(state, value) {
    state.showAlert = value
  }, 
}

也可以尝试将 v-if="showAlert" 替换为 v-show="showAlert" 也许您在组件重新渲染方面遇到了一些问题

关于javascript - 一旦关闭 Bootstrap vue 警报,它就不再工作了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59265828/

相关文章:

javascript - ChartJs 自定义工具提示位置

javascript - 递归 setInterval() 连续运行

javascript - 如何让Vue在每次 Action 发生时从数据库获取数据?

html - 将图像垂直居中到多列容器 Bootstrap 4 中的文本?

javascript - 单标签多内容 Bootstrap 4

css - Bootstrap 4方格

javascript - 查找字符串javascript中出现频率最高的字符

php - 为什么这个 JavaScript 不起作用?

javascript - Vue.js - 通过计算属性从数组中获取唯一值

Vue.js 路由器 - 条件组件渲染