LoginSignup
11
13

More than 5 years have passed since last update.

AngularJSとSocket.IO(angular-socket-io)を利用するときに気をつけること一つ。

Last updated at Posted at 2015-09-24

基本的にAngularJS上でSocket.IOを稼働させる際にはangular-socket-ioを利用するかと思います。

こちらを利用する上で気をつけなければいけないことがあったので書き留めておきます。

問題点

Controllerからsocket.onを使用してイベントリスナーを貼っていた所、一度別のコントローラにいった後にもう一度同じコントローラに戻ると2重にイベントが発火されてしまいました。

解決策

解決するためには、Controllerが破棄される際と同時にsocketのイベントリスナーを破棄する必要があります。

$scope.$on('$destroy', function(event) {
    socket.removeAllListeners();
});

当初、なんでなんで?Controllerのオブジェクトが残ってるの?なんで発火されてしまうの?とか色々思いましたがイベントリスナーが残ってしまうんですね。

解決して良かった。

後ほど分かったことですが、
2重以上に発火される原因として、emitが複数回流れてしまってonがその2倍返されたりすることがありました。これは単純な記述ミスでした。socket通信は難しいですね。

11
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13