2016-06-21 2 views
2

팩토리로 socket.io에 연결합니다. socketId 함수를 반환하여 표시 할 수 있도록 연결의 socketId을 반환합니다. 웹 사이트에서 (지금 테스트 용으로).Socket.io 페이지가로드 될 때 자신의 socketId를 표시합니다. (각도 - 팩토리)

내 공장 :

angular.module('testing').factory('socket', ['$rootScope', function($rootScope) { 
    var socket = io.connect(); 

    return { 
     socketId: function(){ 
      return socket.id; 
     } 
     //some more code here deleted for simplicity 
    }; 
}]); 

내 컨트롤러 코드에서

: 이제

_this.socketId = socket.socketId(); 

나는 그러나 예를 들어 A에 대한 누른 후 페이지 socket.socketId() 반환 undefined, 나는 그것을 얻을 열 때 버튼을 클릭하면 socketId이 표시됩니다.

질문 : socket.io가 내 변수 _this.socketId을 연결 한 후 어떻게 업데이트 할 수 있습니까?

답변

0
당신은 '약속'을 사용할 수 있습니다

, Promise API

그것은 컨트롤러에 socketId 것 같다
return { 
    socketId: function(){ 
     var deferred = $q.defer(); 
     var socket = io.connect(); 
     socket.on('connect', function() { 
      deferred.resolve(socket.id); //Your socketid 
     }); 
     return deferred.promise; 
    } 
+0

답장을 보내 주셔서 감사합니다. @Rejs. 두 개의 개별 소켓을 얻는 것보다 다른 io.connect()를 만들 수 없기 때문에 작동하지 않았습니다. – jmd

0

소켓에 연결할 수도 전에 초기화됩니다!

소켓이 공장에서 연결될 때까지 기다렸다가 연결된 ID를 브로드 캐스트하면 더 좋지 않겠습니까? 컨트롤러에 연결하기 만하면됩니다.

//At the factory 
var socket = io.connect(); 
socket.on("connect",function(){ 
$rootscope.$broadcast("socketId",socket.id); 
}); 

//At the controller 
$scope.$on("socketId",function(data){ 
_this.socketId = data; 
}); 

내가 도움이되기를 바랍니다. 제발 어딘가 잘못 됐으면 제발 고쳐주십시오.

+0

감사합니다. TeeJay, 이것도 효과가 없었습니다. – jmd

+0

지금 바로 편집하십시오. @TeeJay. 컨트롤러에서 console.log (데이터)를 할 때이 객체를 얻습니다 :! [Object] (http://i.imgur.com/EdurSqt.png). – jmd

+0

socket.id를 전달하는 대신 소켓 객체를 전달할 수 있습니까? 내 컴퓨터에서 복제하려고 시도합니다! –

관련 문제