2016-09-29 89 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> 

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

相關問題