【发布时间】:2015-06-13 21:51:25
【问题描述】:
所以基本上我试图找到一种方法来防止使用 $rootscope 、$broadcast 和 $apply。我先给你看代码:
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;
});
// and a bunch more like these
});
})
socketListeners 是我在工厂中实现的第 3 方库 (socket.io),它会在事件发生时广播数据
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);
});
// and a bunch more of these
});
如您所见,代码中存在很多 $rootscope $broadcasts 和 $apply;
所以我正在努力寻找一种更“专业”的方法。绝对欢迎任何提示技巧最佳实践!干杯
【问题讨论】:
标签: javascript angularjs socket.io