У меня есть Laravel / Vue / Vuex SPA, в котором у меня есть модальный лог c, с которым я не могу справиться так, как я хочу. Я возьму один пример использования, например:
Вы вышли из системы и хотите отметить беседу как конфиденциальную. PleaseLogInModal
открывается. Стоит отметить, что это модальное окно может запускаться в разных местах, которые не имеют того же logi c, что и этот вариант использования (скажем, вы хотите посмотреть страницу профиля, но вы вышли из системы).
PleaseLogInModal
имеет одну кнопку для запуска метода login
. Специфика метода не имеет значения, но важно то, что login
может вызываться естественным образом из разных мест в приложении.
Поток в этом варианте использования таков, что после входа в систему должно произойти одно из двух:
- У вас достаточно кредитов -> триггер
lock
метод - У вас недостаточно кредитов -> открыть
PaymentModal
Метод, который открывает начальный модальный:
makePrivate() {
if (!this.isLoggedIn) {
this.$store.dispatch('openModal', 'PleaseLoginModal');
return;
}
if (this.isConversationPrivate) {
this.$store.dispatch('openModal', 'ConversationAlreadyPrivateModal');
return;
}
this.$store.dispatch('openModal', 'MakePrivateModal');
}
Итак, у меня проблема в том, что нет способ получить обратный вызов от PleaseLoginModal
, потому что, если я привяжу к нему then()
, он сработает при открытии модального окна, а не при входе в систему и закрытии модального.
У меня возникла идея изменить go на PleaseLoginModal
и изменить:
login(){
this.$store.dispatch('login');
}
на что-то вроде:
props:{
callback: String
},
methods: {
login(){
this.$store.dispatch('login').then(() => {
this.$store.dispatch(this.callback);
});
}
}
Где я бы передал обратный вызов, например openModal
или что-то в этом роде, но поскольку этот модальный модуль открывается из нескольких мест, мне пришлось бы реализовать несколько разных модальных логик в зависимости от того, кто его открыл, и это кажется действительно грязным решением. Как мне сделать это лучше?