一尘不染

如果外部应用程序更改了持久模型(服务器数据库),AngularJS可以自动更新视图吗?

angularjs

我刚刚开始熟悉AngularJS,但是我想构建一个Web视图,该视图具有一个视图,当服务器端数据库中发生某些更改时,该视图将为用户实时自动更新(不刷新)。

AngularJS可以自动为我处理(大部分)吗?如果是这样,起作用的基本机制是什么?

例如,您是否以某种方式设置AngularJS来定期轮询数据库以查找“模型”更改?还是使用某种类似Comet的机制来通知AngularJS客户端代码模型已更改?

在我的应用程序中,挑战在于其他(非Web)服务器端软件有时会更新数据库。但是,这个问题同样适用于纯Web应用程序,在该Web应用程序中,您可能有多个客户端通过AngularJS
Web客户端更改数据库,并且每个客户端都需要在其中一个更改数据库(模型)时进行更新。


阅读 196

收藏
2020-07-04

共1个答案

一尘不染

您有几种选择…

  1. 您可以使用$timeout和进行每X毫秒的轮询$http,或者如果您使用的数据已连接到REST服务,则可以使用$resource代替$http

  2. 您可以创建一个使用某些Websocket实现并用于scope.$apply处理套接字推送的更改的服务。这是使用socket.io(一个node.js websocket库)的示例:

        myApp.factory('Socket', function($rootScope) {
        var socket = io.connect('http://localhost:3000');

        //Override socket.on to $apply the changes to angular
        return {
            on: function(eventName, fn) {
                socket.on(eventName, function(data) {
                    $rootScope.$apply(function() {
                        fn(data);
                    });
                });
            },
            emit: socket.emit
        };
    })

    function MyCtrl($scope, Socket) {
        Socket.on('content:changed', function(data) {
            $scope.data = data;
        });
        $scope.submitContent = function() {
            socket.emit('content:changed', $scope.data);
        };
    }
  1. 您可以获得真正的高科技,并创建一个Websocket实现,该实现将Angular模型与服务器同步。当客户端更改某些内容时,该更改将自动发送到服务器。或者,如果服务器发生更改,它将被发送到客户端。
    这里,再次使用socket.io在老版本的角度的一个例子:https://github.com/mhevery/angular-node-
    socketio

编辑 :对于#3,我一直在使用Firebase来做到这一点。

2020-07-04