Как выполнить действие перед перезагрузкой страницы пользователя или выходом из моего приложения vuejs - PullRequest
0 голосов
/ 19 февраля 2020

Итак, я использую версию 2.6.11 и сталкиваюсь с некоторыми трудностями при выполнении действия до того, как пользователь выйдет из моего приложения или перезагрузит страницу.

Я делаю интеграцию CRM с телефонией. Когда пользователь получает доступ к моему приложению, ему необходимо войти в систему (не в моем приложении, а в концентраторе, к которому я обращаюсь с помощью SignalR), чтобы я мог выполнить какое-либо действие, например, сделать вызов, принять вызов и обработать события, которые я получать из хаба. Проблема в том, что если пользователь перезагружает страницу или покидает страницу, мне нужно выйти из него через концентратор.

При использовании angular решение было очень простым, мне просто нужно было позвонить:

$scope.$on('$destroy', function () {
    // Log user out here
});

... но я не могу сделать это с vue. Я пытался использовать beforeDestroy, keep-alive, destroyed и другие методы, но ни один из них не помогает мне достичь моей цели. Я попробовал чистый javascript как:

window.onbeforeunload = () => { 
    // Log user out here
}

... но по какой-то причине даже это не помогло мне решить проблему.

Я действительно не знаю, так ли это моя ошибка, или если это еще не реализовано на vue, но я не нашел подобных проблем на inte rnet. Есть ли какое-либо решение внутри фреймворка или что-то, что я могу сделать с javascript, чтобы выполнить действие перед тем, как пользователь выйдет или перезагрузит страницу?

1 Ответ

0 голосов
/ 20 февраля 2020

Нашел решение для моей проблемы. Я поместил событие onbeforeunload не в том месте. И, в моем случае, onbeforeunload не был ответом. Чтобы выйти из системы, мне просто нужно было позвонить:

import { EventBus } from "@/services/eventBus"

window.onunload = function () {
    EventBus.$emit("onunload")
}

... in main.js. Затем я смог прослушать это событие и вызвать функцию в файле .vue:

mounted() {
    EventBus.$on("onunload", this.logout);
},
...