从Angular工厂中的Socket.io函数返回值

时间:2016-09-12 19:56:47

标签: javascript angularjs node.js socket.io

我定义了一个套接字工厂来返回data socket.on('user_entrance')参数中来自我的服务器的数组。

.factory('sockets',function(){

var user_name = window.prompt('enter your name');

var socket = io('http://localhost:3002');

var online_users = [];

socket.emit('user_name', user_name);
  socket.on('user_entrance', function(data,my_id){

  online_users.push(data);

  });

return online_users;

})

并且在控制器中我想使用online_users,我像这样注入“套接字工厂”的依赖,但是返回undefined。

.controller('ChatsCtrl', function($scope, Chats,sockets) {


//this is undefined
console.log(online_users);


})

然而,奇怪的是如果我在任何控制器中运行此代码它可以正常工作。

.controller('someCtrl',function(){

var user_name = window.prompt('enter your name');

var socket = io('http://localhost:3002');

var online_users = [];

socket.emit('user_name', user_name);
  socket.on('user_entrance', function(data,my_id){

  online_users.push(data);

  });


 //this works fine
   console.log(online_users);

    })

我想在工厂中运行代码,以便我可以访问其他控制器中返回的值。如何才能使其工作?

1 个答案:

答案 0 :(得分:0)

注入工厂时,必须通过注入的参数名称引用它:

.controller('ChatsCtrl', function($scope, Chats,sockets) {
   console.log(sockets);
})