如何在angularjs中设置socket.io消息事件后控制器的作用域

如何在angularjs中设置socket.io消息事件后控制器的作用域,angularjs,Angularjs,这是我的main.js var app = angular.module('app', []); app.config(function ($routeProvider, $locationProvider) { $locationProvider.html5Mode(true); // enable pushState $routeProvider.when('/', { templateUrl: '/app.html', controller: 'A

这是我的main.js

var app = angular.module('app', []);

app.config(function ($routeProvider, $locationProvider) { 
   $locationProvider.html5Mode(true); // enable pushState
   $routeProvider.when('/', { 
      templateUrl: '/app.html',
      controller: 'AppCtrl'
   });
   $routeProvider.when('/another/route', { 
      templateUrl: '/deep.html',
      controller: 'AppCtrl'
   });
});
 var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
  socket.on('sendCustomer', function (data) {
    console.log(data);`
    //here i want to set controller scope 
  });
app.controller('AppCtrl', function ($scope) { 
    $scope.model = { 
       message: 'This is my app!!!' 
    };
    $scope.getCustomer = function(imageUrl) {
        alert("here i have to send command to socket io ");
        socket.emit('getCustomer', { });
    };

});
这是index.html

<!DOCTYPE html>
<html>
<head lang="en">
        <meta charset='utf-8'>
    <title>Egghead Videos</title>
    <link rel='stylesheet' href='/vendor/foundation/foundation.min.css'>
</head>
<body>

<div ng-app='app'>
   <ng-view></ng-view> 
</div>

<script type='text/javascript' src='/vendor/angularjs/angular.js'></script>
<script type='text/javascript' src='/socket.js'></script>
<script type='text/javascript' src='/main.js'></script>

</body>
</html>

所以,当在main.js中触发客户端上的sendCustomer事件时,我想通过ng repeat显示controller中的数据,如果是,我可以这样做吗,然后如何

您应该创建这样的服务来处理Socket.IO:

app.factory('socket', ['$rootScope', function ($rootScope) { var socket = io.connect(); return { on: function (eventName, callback) { function wrapper() { var args = arguments; $rootScope.$apply(function () { callback.apply(socket, args); }); } socket.on(eventName, wrapper); return function () { socket.removeListener(eventName, wrapper); }; }, emit: function (eventName, data, callback) { socket.emit(eventName, data, function () { var args = arguments; $rootScope.$apply(function () { if(callback) { callback.apply(socket, args); } }); }); } }; }]); app.factory('socket',['$rootScope',function($rootScope){ var socket=io.connect(); 返回{ on:函数(eventName,回调){ 函数包装器(){ var args=参数; $rootScope.$apply(函数(){ callback.apply(套接字,args); }); } socket.on(eventName,wrapper); 返回函数(){ removeListener(eventName,包装器); }; }, emit:函数(eventName、数据、回调){ emit(事件名、数据、函数(){ var args=参数; $rootScope.$apply(函数(){ 如果(回调){ callback.apply(套接字,args); } }); }); } }; }]); 然后您可以在控制器中使用它:

app.controller('AppCtrl', ['$scope', 'socket', function ($scope, socket) { socket.on('sendCustomer', function (data) { $scope.customers.push(data); }); $scope.model = { message: 'This is my app!!!' }; $scope.customers = []; $scope.getCustomer = function(imageUrl) { alert("here i have to send command to socket io "); socket.emit('getCustomer', { }); }; }); app.controller('AppCtrl',['$scope','socket',函数($scope,socket){ socket.on('sendCustomer',函数(数据){ $scope.customers.push(数据); }); $scope.model={ 信息:“这是我的应用!!!” }; $scope.customers=[]; $scope.getCustomer=函数(imageUrl){ 警报(“这里我必须向套接字io发送命令”); emit('getCustomer',{}); }; }); 最后在app.html中:

<div ng-repeat="customer in customers">{{customer}}</div>
{{customer}

顺便说一句,您可以使用REST API轻松地完成同样的任务,但我猜您应该尝试Socket.IO。

您应该创建这样的服务来处理Socket.IO:

app.factory('socket', ['$rootScope', function ($rootScope) { var socket = io.connect(); return { on: function (eventName, callback) { function wrapper() { var args = arguments; $rootScope.$apply(function () { callback.apply(socket, args); }); } socket.on(eventName, wrapper); return function () { socket.removeListener(eventName, wrapper); }; }, emit: function (eventName, data, callback) { socket.emit(eventName, data, function () { var args = arguments; $rootScope.$apply(function () { if(callback) { callback.apply(socket, args); } }); }); } }; }]); app.factory('socket',['$rootScope',function($rootScope){ var socket=io.connect(); 返回{ on:函数(eventName,回调){ 函数包装器(){ var args=参数; $rootScope.$apply(函数(){ callback.apply(套接字,args); }); } socket.on(eventName,wrapper); 返回函数(){ removeListener(eventName,包装器); }; }, emit:函数(eventName、数据、回调){ emit(事件名、数据、函数(){ var args=参数; $rootScope.$apply(函数(){ 如果(回调){ callback.apply(套接字,args); } }); }); } }; }]); 然后您可以在控制器中使用它:

app.controller('AppCtrl', ['$scope', 'socket', function ($scope, socket) { socket.on('sendCustomer', function (data) { $scope.customers.push(data); }); $scope.model = { message: 'This is my app!!!' }; $scope.customers = []; $scope.getCustomer = function(imageUrl) { alert("here i have to send command to socket io "); socket.emit('getCustomer', { }); }; }); app.controller('AppCtrl',['$scope','socket',函数($scope,socket){ socket.on('sendCustomer',函数(数据){ $scope.customers.push(数据); }); $scope.model={ 信息:“这是我的应用!!!” }; $scope.customers=[]; $scope.getCustomer=函数(imageUrl){ 警报(“这里我必须向套接字io发送命令”); emit('getCustomer',{}); }; }); 最后在app.html中:

<div ng-repeat="customer in customers">{{customer}}</div>
{{customer}

顺便说一句,您可以使用RESTAPI轻松地完成同样的任务,但我猜您应该尝试Socket.IO。

首先,如果您要在模块中使用任何东西,您必须将其传入

app.controller('AppCtr', ['$scope', 'socket', function($scope, socket) { ...
因为您在Angular之外的套接字中进行操作,所以还必须注意$apply(),以使这些更改显示在Angular内部

我可以在这里输入更多信息,但实际上,Brian Ford的socket.io seed和相关博客文章是socket+express+angular的最佳起点


首先,如果要在模块中使用任何内容,必须将其传递给用户

app.controller('AppCtr', ['$scope', 'socket', function($scope, socket) { ...
因为您在Angular之外的套接字中进行操作,所以还必须注意$apply(),以使这些更改显示在Angular内部

我可以在这里输入更多信息,但实际上,Brian Ford的socket.io seed和相关博客文章是socket+express+angular的最佳起点


quand j'Use votre code,一方使用一方“插座”的瞬间,另一方使用控制器的角度。Cela détruit le rendu de la page。您是否可以使用votre code,因为您在一方“插座”的瞬间没有评论?quand j'Use votre code,另一方使用一方“插座”的瞬间他是一个有棱角的控制者。他是一个真正的人。你是怎么想的?你是怎么想的?