Я спросил здесь У меня есть дублирование события после перемещения действия в объекте хранилища о дублировании события и предложенное решение выглядело хорошим, но после того, как я вернулся к этому вопросу, у меня возникли те же проблемы с успехомдубликаты сообщений.В моем файле vue контейнера MainApp.vue я установил обработчик события:
<template>
<body class="account-body">
<v-dialog/>
<MainHeader></MainHeader>
<div class="content p-0 m-0" style="width: 100% !important; margin: auto !important;">
<notifications group="wiznext_notification"/>
<router-view></router-view>
</div>
</body>
</template>
<script>
import {bus} from '../../app';
import MainHeader from './MainHeader.vue';
import { deleteFromUserListsKey, runDeleteFromUserLists } from "../../helpers/commonFuncs";
export default {
name: 'main-app',
components: {MainHeader},
created() {
// console.log('resources/js/components/Horizontal/MainApp.vue Component created.')
},
mounted() {
console.log('resources/js/components/Horizontal/MainApp.vue Component MOUNTED.')
bus.$on('dialog_confirmed', (paramsArray) => {
// alert( "resources/js/components/Horizontal/MainApp.vue dialog_confirmed paramsArray::"+var_dump(paramsArray) )
if (paramsArray.key == this.deleteFromUserListsKey(paramsArray.user_list_id)) {
this.runDeleteFromUserLists(paramsArray.user_list_id, paramsArray.user_id, paramsArray.index);
}
})
},
methods: {
deleteFromUserListsKey, runDeleteFromUserLists
}
}
</script>
Я вызываю диалог подтверждения с помощью click.prevent:
<div class="card-footer">
<div class="float-right">
<i :class="'mr-2 '+getHeaderIcon('delete')" @click.prevent="confirmDeleteUserList( nextUserList.id, currentLoggedUser.id,
nextUserList.title, index );" title="Delete"></i>
</div>
из моих ресурсов смешивания / js / appMixin.js запускается, и если пользователь выбирает подтвердить, что событие dialog_confirmed отправляется:
confirmMsg: function (question, paramsArray, title, bus) {
this.$modal.show('dialog', {
title: title,
text: question,
buttons: [
{
title: 'Yes',
default: true, // Will be triggered by default if 'Enter' pressed.
handler: () => {
bus.$emit('dialog_confirmed', paramsArray);
this.$modal.hide('dialog')
}
},
{
title: '', // Button title
handler: () => {
} // Button click handler
},
{
title: 'Cancel'
}
]
})
},
В моем магазине ресурсы / js / store.js OI определяют метод удаления элементов и запуска событий:
userListDelete(context, paramsArray ) {
axios({
method: ( 'delete' ),
url: this.getters.apiUrl + '/personal/user-lists/' + paramsArray.user_list_id,
}).then((response) => {
let L = this.getters.userLists.length
for (var I = 0; I < L; I++) {
if (response.data.id == this.getters.userLists[I].id) {
this.getters.userLists.splice(this.getters.userLists.indexOf(this.getters.userLists[I]), 1)
context.commit('refreshUserLists', this.getters.userLists);
break;
}
}
bus.$emit( 'onUserListDeleteSuccess', response );
}).catch((error) => {
bus.$emit('onUserListDeleteFailure', error);
});
}, // userListDelete(context, paramsArray ) {
В файле list.vue, из которого удаляются элементы, я определяю всплывающие сообщения:
mounted() {
console.log("resources/js/components/Horizontal/personal/userLists.vue Mounted()::")
bus.$on('onUserListDeleteSuccess', (response) => {
this.is_page_updating = false
this.showPopupMessage("User lists", 'User\'s list was successfully deleted!', 'success');
// bus.$off('onUserListDeleteSuccess')
})
bus.$on('onUserListDeleteFailure', (error) => {
this.is_page_updating = false
if (error.error_code != 11) {
this.$setLaravelValidationErrorsFromResponse(error.message);
this.showRunTimeError(error, this);
this.showPopupMessage("User lists", 'Error adding user\'s list !', 'error');
}
// bus.$off('onUserListDeleteFailure')
})
this.is_page_loaded = true
this.setAppTitle("Personal", 'User\'s lists', bus);
}, // mounted() {
Я показываю сообщения в событии монтирования всех страниц и вижу, что событие монтирования MainApp.vue вызывается только один раз и когдаоткрывается другая страница. Я вижу относительное сообщение в консоли.Погуглил я нашел метод bus. $ Off, но он мне не помогает, в любом случае у меня есть несколько дублированных сообщений, особенно если я на разных страницах.
Как исправить эти дублированные сообщения?
Спасибо!