【发布时间】:2020-04-03 13:22:11
【问题描述】:
我正在尝试使用 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"];
}
这只适用于第一次。当我第一次触发警报时,它会打开。单击关闭图标后,我无法恢复警报。
【问题讨论】:
-
我相信(必须检查文档以确认)一旦警报被解除,它就会被销毁。要取回它,您应该重新创建它
-
有什么要求?一旦警报被解除,showAlert 状态将设置为 false,因为它应该是并且警报消失。如果您希望显示新的警报消息,则需要进行必要的突变以更新警报消息并将 showAlert 状态更改为 true。
-
每当用户执行操作时,我都会将 showAlert 设置为 true ..
this.$store.commit("alert/showAlert");. 但是解除的警报如何使 showAlert 为 false?因为我没有在我的代码中处理它。 -
dismissable 将使警报从 dom 中消失。您可以不使用它,而是使用自定义关闭按钮并侦听其上的单击事件,然后在您自己的事件侦听器中更改您的 redux 状态。另一种方法是监听您的可关闭警报关闭事件并将 showAlert 设置为 false,一旦返回 true,将呈现新警报。
标签: javascript vue.js bootstrap-4 bootstrap-vue