Всем привет, имеим
main.jsangular.module('app',['btford.socket-io'])
.factory('socket', function (socketFactory) {
var myIoSocket = io.connect('http://localhost');
var mySocket = socketFactory({
ioSocket: myIoSocket
});
return mySocket;
})
.directive('myDir',function(){
return {
restrict: 'E',
scope:{
marker:'@'
},
template: '<p ng-bind="marker"></p><ul><li ng-repeat="item in ItemList"><div ng-bind="item"></div></li></ul>',
controller:function($scope, socket){
socket.emit('joinRoom', $scope.marker );
socket.on('updateEvent',function(data){
$scope.ItemList= data;
});
}
};
})
.controller('main',function($scope, $http){
$http.get('localhost/api/getList')
.success(function(data){
$scope.markerlist = data;
});
});
index.html<html lang="en">
<body ng-app="app">
<div ng-controller='main' class="main">
<div ng-repeat='marker in markerlist'>
<my-dir marker='{{marker}}'></my-dir>
</div>
</div>
</body>
<script src="./libs/socket.io-client/socket.io.js"></script>
<script src="./libs/angular/angular.min.js"></script>
<script src="./libs/angular-socket-io/socket.min.js"></script>
<script src="./js/main.js"></script>
</html>
как должно отрабатывать:
1) открываем страничку
2) по http получаем первычные данные
3) отрисовываются директивы
4) каждая директива подключается к своей комнате и ждет сообщений от сервера
5) сервер генерит сообщение
6) директива получает это сообщение только из своей комнаты куда подключилась и изменяет данные в только своем скоупе
но в реализации выше при генерации сообщения, данные получают все директивы , т.е. если сгенерилось сообщение для комнаты marker1 это сообщение получат все директивы: marker1 и marker2 и marker3, и информация будет везде одинаковая
я так полагаю это из-за того что каждая директива слушает сообщения без пирвязки к комнате? как это исправить?
может не правильно сделал фабрику? или в самой директиве надо логику поменять?