保持全局数据AngularJS的最佳方法

时间:2014-07-07 21:42:28

标签: angularjs

我正在编写一个应用程序,其目标是管理通过socket.io连接的一些客户端。我必须管理它们的状态(连接/断开连接)以及客户端的实时详细信息,例如发出的错误。我尝试了两种不同的方法,在控制器上设置监听器并创建服务。控制器方法的问题是每次加载控制器时我都必须重复发射以获取最新数据。有了这些服务,我遇到了一个全局监听器(接收来自所有客户端的一般通知)的问题,我无法想象如何操纵另一个服务的服务(我认为你不能)。我一直在考虑实现一个全局控制器,所有控制器都可以从$ rootScope继承或附加我的数据。在我走之前。我想知道从更有经验的角度开发者那里听到什么是更好的方法从这样的应用程序和管理全球数据?

谢谢

1 个答案:

答案 0 :(得分:0)

问题在于:

.provider('notifications',['socket', 'redisMsg', function(socket, redis) {

您正在定义提供程序,并同时注入服务实例(套接字,redisMsg)。这是不允许的。在提供程序中,您只能注入其他提供程序。如果你需要实例,那么$ get应该注入那些实例而不是提供者函数:

  .provider('notifications',[function() {
    var notifications = [];
    return {
        $get: ['socket', 'redisMsg', function(socket, redis) {
            return {
                listen: function() {
                    // complains in the line below
                    // unknown provider socket
                    // if I change to socketProvider
                    // still fails with
                    // undefined is not a function
                    socket.on('redis', function(msg) {
                        redis.processRedis(msg);
                        var message = redis.getMessage();
                        if (message.action !== 'jobRunning') {
                            notifications.push(message);
                        }
                        if (message.action === 'PeberryChange') {
                            socket.emit('get-peberries');
                        }
                        console.log(message);
                    });
                },
                getNotifications: function(action) {
                    if (typeof action !== 'undefined') {
                        return alert("NOT DONE YET BRUH!!!");
                    }
                    return notifications;
                }
            };
        }]
    };
}])

Plunker Here