javascript - 是否可以从 AngularJS 工厂返回 `this`?

标签 javascript angularjs

在我的应用程序中,我有静态帮助程序“类”为我执行大量逻辑,在这种特定情况下,此类是消息传递类并执行需要访问三个不同服务(工厂)的逻辑。

唯一需要引用此类的工厂是网络工厂,因为当收到某个数据包时,我需要强制消息传递从服务器更新它的数据库。

这是我正在尝试做的一个例子:

angular.module('database', []).factory('$database', function() {
    // SQLite implementation

    return {
       // ...
    };
});

angular.module('networking', []).factory('$networking', ['$database', function($database) {
    // Websocket implementation
    if(packet.opcode == 8) {
        Messaging.update(this, $database);
    }

    return {
       // ...
    };
}]);

Messaging = {
    // Messaging implementation..
    update: function(networking, database) {
        if(networking === undefined) { ]
            console.log("Networking is undefined.");
            return;
        }

        if(database === undefined) {
            console.log("Database is undefined.");
            return;
        }

        // Messaging update implementation.
};

不幸的是,Networking is undefined. 消息在尝试调用 Messaging.update(this, $database) 时出现,如上所示。

注意:我不能简单地将 $networking 实现注入(inject) $scope 并使用它,因为这是在“后端”处理的。此逻辑应完全独立于范围执行。每当服务器(Websocket 实现)向客户端发送数据包操作码 8 时,无论范围如何,都应执行此代码。此执行完全在后台完成,用户甚至不知道它发生了。

我还在其他适用的地方(从范围内)使用 Messaging.update,例如当用户发送消息时在 MessagingController 中,我可以使用注入(inject)的 $networking 服务调用 Message.update。不幸的是,注入(inject)不是这里的一种选择。

注意:创建消息即服务实现会产生依赖循环,因为我目前有三个服务 file-cache, database, networking 并且消息实现需要这三者的功能。当收到消息时,网络需要获取本地 SQLite 数据库中不可用的用户信息。文件缓存用于创建新线程时缓存用户头像图像,当然还需要数据库来存储消息。

最佳答案

这个模式怎么样

angular.module('networking', []).factory('$networking', ['$database', function($database) {

    var net = {
        ....
    };

    // Websocket implementation
    if(packet.opcode == 8) {
        Messaging.update(net, $database);
    }

    return net;
}]);

关于javascript - 是否可以从 AngularJS 工厂返回 `this`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34275258/

相关文章:

javascript - 如何在 AngularJS 中保存动态表的所有行?

javascript - Angular/karma : Error: [$injector:nomod] Module 'module' is not available

javascript - React/Redux、useEffect/useSelector、陈旧的闭包和事件监听器

javascript - 将独特的样式应用于 Angular 中 ng-repeat 列表中的每个 <li>

javascript - 使用 ng-attr-href 从 Angular 到直接用户交互

JavaScript - 解析 XML 数据

javascript - 在 AngularJS 中将空文本而不是 null 设置为 ng-model

javascript - 如果包含键值对,则返回数组中的对象

angularjs - 如何在 ng-options 中使用自然排序?

javascript - 如何在 Angular 智能表上设置默认排序顺序?