nuxt 레이아웃 내에서 메서드를 실행하기 위한 vuex 상태 변경 감지
페이지 또는 vue 컴포넌트 내에서 폼 제출을 완료하면 스낵바 알림을 표시하려고 합니다.vuex 스토어를 사용하여 경고 유형 및 메시지를 관리합니다.
my-nuxt-app/store/my-nuxt.params
export const state = () => ({
message: '',
type: ''
});
export const getters = {
hasAlert(state) {
return state.message !== '';
},
alertMessage(state) {
return state.message;
},
alertType(state) {
return state.type;
}
};
export const mutations = {
SET_ALERT(state, payload) {
state.type = payload.type;
state.message = payload.message;
}
};
export const actions = {
setAlert({commit}, payload) {
commit('SET_ALERT', payload);
},
clearAlert({commit}) {
commit('SET_ALERT', {});
}
};
그리고 어플리케이션에서 글로벌하게 getter에 접속하기 위한 nuxt 플러그인을 만들었습니다.
my-nuxt-app/plugins/my-nuxt.params
import Vue from 'vue';
import {mapGetters} from 'vuex';
const Alert = {
install(Vue, options) {
Vue.mixin({
computed: {
...mapGetters({
hasAlert: 'alerts/hasAlert',
alertType: 'alerts/alertType',
alertMessage: 'alerts/alertMessage'
})
}
});
}
};
Vue.use(Alert);
내 안에AccountForm
컴포넌트 제출방법, 아래와 같이 제 경고정보를 발송합니다.
my-nuxt-app/컴포넌트/폼/계정폼.표시하다
...
methods: {
async submit () {
try {
await this.$axios.patch("/settings/profile", this.form);
this.$store.dispatch('alerts/setAlert', {
type: 'success',
message: 'You have successfully updated your information.'
});
} catch (e) {
}
}
},
...
}
...
그리고 이건AccountForm.vue
컴포넌트는 의 하위 컴포넌트입니다.profile.vue
이 페이지는 내 프로젝트의 페이지 폴더 안에 있습니다.그리고 또 제가 이 모든 것들을dashboard.vue
여기에 대한 레이아웃profile.vue
페이지와 페이지 디렉토리 내의 대부분의 페이지를 공통 레이아웃으로 사용합니다.그래서 스낵바 컴포넌트를 추가했습니다.dashboard
레이아웃을 지정하여 필요할 때마다 경보 메시지를 표시합니다.
my-nuxt-app/my-nuxt-app/my-nux표시하다
<template>
...
<v-snackbar
:timeout="snackbar.timeout"
:color="snackbar.color"
:top="snackbar.y === 'top'"
:bottom="snackbar.y === 'bottom'"
:right="snackbar.x === 'right'"
:left="snackbar.x === 'left'"
:multi-line="snackbar.mode === 'multi-line'"
:vertical="snackbar.mode === 'vertical'"
v-model="snackbar.show"
>
{{ snackbar.text }}
<v-btn flat icon dark @click.native="snackbar.show = false">
<v-icon>close</v-icon>
</v-btn>
</v-snackbar>
...
</template>
<script>
...
data: () => ({
snackbar: {
show: false,
y: 'top',
x: null,
mode: '',
timeout: 6000,
color: '',
text: ''
},
}),
computed: {
availableAlert: function () {
return this.hasAlert;
}
},
watch: {
availableAlert: function(alert) {
if(alert) {
this.showAlert(this.alertType, this.alertMessage);
this.$store.dispatch('alerts/clearAlert');
}
}
},
methods: {
showAlert(type, message) {
this.snackbar.show = true;
this.snackbar.color = type;
this.snackbar.text = message;
}
}
</script>
처음 폼을 전송하면 알림 메시지가 나타나고 그 후 페이지를 새로고침한 후 전송해야 알림을 받을 수 있습니다.vuex 상태 변경 및 트리거를 감지하는 방법을 알려 주십시오.showAlert
내부 방식dashboard.vue
따라서.
아마 당신이 체크하는 방법일 겁니다hasAlert
당신의.clearAlert
빈 오브젝트를 전달합니다.setAlert
이 빈 객체의 속성을 할당하려고 합니다.hasAlert
빈 문자열인지 확인하고 있습니다.
clearAlert를 다음으로 변경하는 경우:
clearAlert({commit}) {
commit('SET_ALERT', { message: '', type: '' });
}
그러면 문제가 해결될 거예요.
언급URL : https://stackoverflow.com/questions/61773812/detect-vuex-state-change-to-execute-a-method-inside-a-nuxt-layout
'source' 카테고리의 다른 글
컴파일러가 "initializer 누락"이라는 경고를 보내는 이유는 무엇입니까?구조가 초기화되지 않았습니까? (0) | 2022.07.17 |
---|---|
자바에서의 인터페이스와 @interface의 차이점은 무엇입니까? (0) | 2022.07.17 |
Java 멀티스레딩에서 Count Down Latch는 어떻게 사용됩니까? (0) | 2022.07.17 |
ld.exe: 출력 파일을 열 수 없습니다...: 권한이 거부되었습니다. (0) | 2022.07.17 |
C에서 1123456789에서 1,123,456,789까지의 숫자를 포맷하려면 어떻게 해야 합니까? (0) | 2022.07.17 |