Denis_maker
@Denis_maker
✔ Инженер-программист. Веду весь спектр разработки

Ionic 5: Открытый ранее компонент продолжает работать в фоне. Как исправить?

Разрабатываю многопользовательский чат на ionic 5. Использую модификацию с angular.js
Описание: Есть сервисный компонент, который запускает socket. Есть страница со списком диалогов и сама страница dialog, на которую я каждый раз перехожу, передавая id пользователя, там происходит переписка. На странице dialog у меня есть функция socket для получения сообщений. благодаря ей я обнаружил, что компонент со своими параметрами продолжает работать после закрытия.
Допустим я открывал страницу dialog с разными пользователями:
/home/dialog;id_chat=1;id_friend=1
/home/dialog;id_chat=2;id_friend=2
/home/dialog;id_chat=3;id_friend=3
Теперь, находясь на той же странице dialog с другими параметрами, к примеру, "/home/dialog;id_chat=7;id_friend=7", я вижу, что все открытые ранее компоненты продолжают работать.

Конкретно проблема заключается в том, что общаясь с пользователям id_friend=7, у меня читаются сообщения от тех пользователей, диалог которых я открывал, при чём диалог может быть открыт 3 раза, значит где-то в фоне висят 3 одинаковых страницы, которые продолжают работать...
Как это исправить? Как убивать компонент в фоне каждый раз, когда я выхожу из него? Я не думаю, что проблема в socket, поскольку я вывожу console.log(id_friend), это значение разное для каждого диалога.
  • Вопрос задан
  • 47 просмотров
Решения вопроса 1
Denis_maker
@Denis_maker Автор вопроса
✔ Инженер-программист. Веду весь спектр разработки
И так, вот развязка: при открытии страницы создаются socket слушатели. Именно они создают эту проблему, поскольку продолжают существовать после закрытии страницы. При открытии страницы последующие разы слушатели продолжаются создаваться, их становится больше.
Решение: закрывать сокет-слушателей при выходе со странице. Здесь написано, как это сделать: https://qna.habr.com/q/1006197 (в комментариях к вопросу, отмеченному как ответ есть код и обоснование)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы