当前位置: 首页 > 面试题库 >

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

潘弘扬
2023-03-14
问题内容

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

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

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

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


问题答案:

您有几种选择…

  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来做到这一点。



 类似资料:
  • 问题内容: 我试图弄清楚Angular的工作原理,并在模型更改时无法更新视图。 的HTML JS http://jsfiddle.net/N2G7z/ 有任何想法吗? 问题答案: 正如上面提到的Ajay beniwal一样,您需要使用Apply来开始消化。

  • 问题内容: 当前,我使用Visual Studio数据库项目,因此我可以一键将更改部署到数据库并将数据保留在数据库中。 现在,我希望能够在Entity Framework中创建模型并一键部署。 所以我得到了sql脚本来从Entity Framework创建数据库。我可以运行此脚本来创建数据库,但是我想将数据保留在数据库中。 有什么办法吗?有什么工具可以做到这一点?我应该用T4自己生成吗? 我使用C

  • 问题内容: 我已经阅读了有关此问题的主题,例如:[\AngularJS中未更新视图,\但我仍然不明白如何在我的简单示例中应用它。 我有这个功能: 当代码中的其他地方更新时(用户单击,交互,发送XHR请求时),它不会更新我的视图。我知道我需要使用$apply做些事情,但我不知道在哪里以及如何做。 有人可以向我解释如何针对这个简单用例解决此问题吗? 我的模型看起来像这样(如果这个问题是必要的)-它里面

  • 问题内容: 我已经定义了一个模型,并通过创建了它的关联数据库。现在,我已经向模型添加了一些字段,我syncdb再次尝试了,但是没有输出出现。尝试从模板访问这些新字段时,出现“ No Such Column”异常,使我相信syncdb实际上并未更新数据库。这里正确的命令是什么? 问题答案: 似乎你需要的是迁移系统。South真的很棒,工作非常好,有一些自动化工具可以简化你的工作流程。 注意:sync

  • 问题内容: 启动器在游戏中最常见。想想英雄联盟,星际争霸II或几乎所有的MMO。在开始实际游戏之前,您有一个小型启动器应用程序,负责更新和修补。 我想通过我正在开发的特定非游戏应用程序来朝这个方向发展。启动器的概念非常有意义:它检查更新,替换适当的二进制文件/库,运行完整性检查并启动应用程序。但是,启动器如何自我更新?这往往是罕见的事件,但是如何完成呢?启动程序实际上是否只是覆盖当前正在运行的二进

  • 问题内容: 我有一个扩展ExpandableListActivity的活动。我使用SimpleCursorTreeAdapter填充ExpandableListView。我的布局包含列表视图和空视图。在应用启动时,ExpandableListActivity自动选择要显示的右视图。 我的步骤: 应用启动,没有数据。(屏幕上的空白视图) 将一些数据插入db。 调用adapter.notifyData