2016-09-29 98 views
0

我是这个套接字中的新成员。我使用后端节点js和前端angularjs。Angularjs + socket +无法将数据传入控制器

我在服务中打印数据,但无法将该数据存入控制器。

server.js:

var server = app.listen(port); 
var io = require('socket.io').listen(server); 
io.on('connection', function(socket) { 
    setInterval(function() { 
     socket.emit('addCustomer', { 
      time : new Date() + "8989" 
     }); 
    }, 1000); 
}); 

service.js:

变种应用= angular.module( '对myApp');

app.factory('socket', ['$rootScope', 
function($rootScope) { 
    var socket = io.connect('http://localhost:9090'); 

    return { 
     // replace with the code below 
     on : function() {//on: function(addCustomer){ 
      socket.on("addCustomer", function(customer) { 
       console.log("Socket Factory - customer added", customer); 
       return customer; 
      }); 
     }, 
     emit : function(addCustomer, data) { 
      console.log("rk"); 
      console.log(data); 
      socket.emit(addCustomer, data); 
     } 
    }; 
}]); 

controller.js:在控制台

var app = angular.module('myApp'); 

app.controller('CustomerCtrl', function($scope, socket) { 

    socket.on('addCustomer', function(data) { 
     console.log(data); 
     console.log("--") 
     $scope.time = data.time; 
    }); 

}) 

输出在出厂文件。但我无法将这些数据传递给控制器​​。请任何人帮助解决这个问题。

输出在控制台:

Socket Factory - customer added Object {time: "Thu Sep 29 2016 16:52:44 GMT+0530 (IST)8989"} 
socketService.js:11 Socket Factory - customer added Object {time: "Thu Sep 29 2016 16:52:45 GMT+0530 (IST)8989"} 
socketService.js:11 Socket Factory - customer added Object {time: "Thu Sep 29 2016 16:52:46 GMT+0530 (IST)8989"} 

回答

0

应该运行角度消化,当更改数据的角lifectycle外侧(非角度的异步函数)

socket.on('addCustomer', function(data) { 
     console.log(data); 
     console.log("--") 
     $scope.time = data.time; 
     $scope.$apply(); //this call actiually should be placed in your service 
}); 

编辑:

稀释,谢谢,你只是不提供你的服务params。更改相应的服务方法:

函数($ rootScope){{0}} {socket} = io.connect('http://localhost:9090');

return { 
    // replace with the code below 
    on : function(type, cb) {//on: function(addCustomer){ 
     socket.on(type, cb); 
    } 
}; 
+0

势必控制台日志只能从唯一的工厂印刷只是要确定。控制台日志不在控制器中打印。 – RSKMR

0

您是否正确地从您的视图中调用您的控制器。你可以在这里看看更多的信息AngularJS. How to call controller function from outside of controller component

你可以复制你的视图文件,以便我们可以看看。另外,如果什么都不解决,我会尝试显式加载监听器,像这样。

var app = angular.module('myApp'); 

app.controller('CustomerCtrl', function($scope, socket) { 

    $scope.loadListener = function() { 
     Console.log("Loading listener for event addCustomer")  
     socket.on('addCustomer', function(data) { 
      console.log(data); 
      console.log("--") 
      $scope.time = data.time; 
     }); 
    } 

    $scope.testAlert = function() { alert("Method bound to controller") } 
}) 

,并明确了loadListener方法结合到通过一个按钮只是NG-点击查看,如果你的控制器实际上是正确绑定。

通过ng-init还有另一种方法。你可以看看这个线程。 How to execute angular controller function on page load?

随着NG-INIT你很可能做

<div data-ng-controller="CustomerCtrl" data-ng-init="loadListener()"></div> 

,如果你的控制器可以正常

相关问题