javascript - angularjs not using $rootscope and $broadcast -
so i'm trying find way prevent using $rootscope ,$broadcast , $apply. let me show code first:
app.controller('firstcontroller', function ($scope, servicechatbuddy, socketlisteners){ $scope.chatbuddy = servicechatbuddy; $scope.$on('user delete:updated', function (event, id) { $scope.chatbuddy.users[id]['marker'].setmap(null); delete $scope.chatbuddy.users[id]; }); $scope.$on('loadposition:updated', function (event, data) { $scope.$apply(function () { $scope.chatbuddy.users[data.id] = data.obj; }); // , bunch more these }); })
the socketlisteners 3rd party libary (socket.io )which implemented in factory broadcast data when event has occured
socketmodule.factory('socketlisteners', function ($rootscope, decoratefactory) { var sockets = {}; var socket = io.connect('http://localhost:8000'); sockets.listen = function () { socket.on('loadposition', function (data) { $rootscope.$broadcast('loadposition:updated', data) }); socket.on('client leave', function (id) { $rootscope.$broadcast('user delete:updated', id); }); // , bunch more of these });
as can see code exist alot of $rootscope $broadcasts , $apply;
so i'm struggling find way more 'professional'. hints tricks best practices absolutely welcome! cheers
try https://github.com/btford/angular-socket-io
socket.js (service)
angular.module('app') .service('socket', function (socketfactory) { var socket = io.connect('http://localhost:8000'); var mysocket = socketfactory({ iosocket: socket }); return mysocket; });
firstcontroller.js
app.controller('firstcontroller', function ($scope, socket){ socket.forward('user delete:updated', $scope); socket.forward('loadposition:updated', $scope); $scope.$on('user delete:updated', function (event, id) { $scope.chatbuddy.users[id]['marker'].setmap(null); delete $scope.chatbuddy.users[id]; }); $scope.$on('loadposition:updated', function (event, data) { $scope.$apply(function () { $scope.chatbuddy.users[data.id] = data.obj; }); // , bunch more these }); });
when scope destroyed, listeners destroyed :)
Comments
Post a Comment