@DarkLynx91

Почему так происходит?

Добрый день, не могу никак понять почему так происходит, помогите разобраться.

Есть контроллер который отвечает за отображение детальной информации по проекту.
Есть контроллер который выводит список проектов.

Внутри контроллера деталки проекта генерируется событие на получение проекта, например
socket.emit('tickets:getOne', $stateParams.id);
и там же подвешиваюсь на событие получения данных, например
socket.on('tickets:getOne:success', function(data){
console.log(data);
});


Так вот в чем проблема, когда я из списка перехожу в проект в консоль 1 раз выводятся данные. Если я возвращаюсь в список и перехожу в другой проект, в консоль данные выводятся уже 2 раза и так с каждым переходом в проект данные в консоли выводятся на 1 раз больше. Что это я никак не могу понять.

В frame websocket подключения событие передается 1 раз. В коде данное подписка на это событие так же используется 1 раз.
  • Вопрос задан
  • 197 просмотров
Решения вопроса 1
AMar4enko
@AMar4enko
Даже не будучи знакомым с Socket.io я могу сказать, что вы каждый раз инстанцируя контроллер подписываетесь на событие.
А отписываться кто будет? Или вы думаете, что он вам как-то магически сам отпишется, при удалении контроллера?

function onGetOne() {
}

socket.on('tickets:getOne:success', onGetOne);

$scope.$on('$destroy', function() {
  socket.removeListener('tickets:getOne:success', onGetOne);
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
miraage
@miraage
Старый прогер
Работа с сокетами должна быть инкапсулирована в отдельный сервис с более высокой абстракцией для контроллеров, директив и других сервисов.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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