2015-06-22 9 views
5

अद्यतन नहीं करता है मेरे पास क्लाइंट पर चल रहे AngularJS के साथ socket.io क्लाइंट-सर्वर सेटअप है।सॉकेट.आईओ संदेश कोणीय चर

// Server.js 
var io = require('socket.io')(server); 


io.on('connection', function (socket) { 
socket.on('message', function (msg) { 
    //console.log(msg); 
    console.log(msg); 
    io.emit('message', msg); 
}); 
}); 

मनाया के रूप में, यह अनिवार्य रूप से चर msg में संग्रहीत डेटा को किसी message घटनाओं का उत्सर्जन करता है।

और फिर मेरे पास निम्न क्लाइंट कोड है।

var container = angular.module("AdminApp", []); 

container.controller("StatsController", function($scope) { 

    var socket = io.connect(); 

    socket.on('message', function (msg) { 
     console.log(msg); 
     $scope.frontEnd = msg; 
    }); 
}); 

अब मुझे एक अजीब समस्या का सामना करना पड़ रहा है। जब मैं frontEnd प्रिंट करने के लिए निम्न कोड स्निपेट लिखता हूं, तो यह प्रदर्शित नहीं होता है। लेकिन console.log(msg); काम करता है और यह मुझे परिवर्तनीय msg से उत्सर्जित डेटा दिखाता है।

<body ng-app="AdminApp"> 

    <div ng-controller="StatsController"> 
     <p>{{frontEnd}}</p> //Doesn't show anything 
    </div> 

</body> 

किसी को भी मेरी मदद कर सकते हैं?

उत्तर

8

दृश्य को अपडेट करने के लिए आपको $scope.$apply(function() {}) के साथ मॉडल के परिवर्तन ($scope पर गुणों को बदलने) की आवश्यकता है।

var container = angular.module("AdminApp", []); 

    container.controller("StatsController", function($scope) { 

     var socket = io.connect(); 

     socket.on('message', function (msg) { 
      console.log(msg); 
      $scope.$apply(function() { $scope.frontEnd = msg; }); 
     }); 
    }); 

$ लागू() कोणीय ढांचे के बाहर से कोणीय में एक अभिव्यक्ति निष्पादित करने के लिए प्रयोग किया जाता है। (उदाहरण के लिए ब्राउज़र डोम घटनाओं से, सेटटाइमआउट, एक्सएचआर या तृतीय पक्ष पुस्तकालय)। चूंकि हम में कॉल कर रहे हैं, कोणीय ढांचे को अपवाद हैंडलिंग के उचित दायरे के जीवन चक्र को निष्पादित करने की आवश्यकता है, घड़ियों को निष्पादित करना।

आधिकारिक Angular Documentation

+0

भयानक काम किया। बहुत बहुत धन्यवाद :) –

+0

मेरा दिन बचाया। धन्यवाद – sand

0

इस से शायद इसलिए है क्योंकि socket.on('message', function (msg) {.. कोणीय ज्ञान से बाहर है। यह कोणीय के बाहर कुछ हो रहा है।

तो फिर तुम ओ कोणीय के बाहर कुछ तो आप के बाद से वहाँ अद्यतन करने के लिए कुछ कर रहे हैं अद्यतन करने के लिए कोणीय बताने के लिए है, तो

उपयोग $scope.$apply() के बाद $scope.frontEnd = msg;

या अधिक बेहतर में लपेट $timeout, के रूप में

$timeout(function() { 
    $scope.frontEnd = msg; 
}); 

यहाँ है एक अच्छा explanation क्यों $timeout अधिक पूर्व है ferable।

संबंधित मुद्दे