gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:46:29 25 4
gpt4 key购买 nike

我刚刚开始熟悉 AngularJS,但我想构建一个 Web 应用程序,该应用程序的 View 可以在服务器端发生变化时为用户实时(不刷新)自动更新数据库。

AngularJS 可以(大部分)自动为我处理这个问题吗?如果是这样,工作的基 native 制是什么?

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

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

最佳答案

你有几个选择......

  1. 您可以使用 $timeout$http 每 X 毫秒进行一次轮询,或者如果您使用的数据连接到 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);
    };
    }
  3. 您可以获得真正的高科技,并创建一个 websocket 实现,将 Angular 模型与服务器同步。当客户端更改某些内容时,该更改会自动发送到服务器。或者,如果服务器发生变化,它会被发送到客户端。
    这是旧版本 Angular 中的一个示例,再次使用 socket.io:https://github.com/mhevery/angular-node-socketio

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

关于javascript - 如果外部应用程序更改了持久模型(服务器数据库),AngularJS 可以自动更新 View 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11276520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com