如何在 AngularJs 中的数据库发生变化时立即实现自动视图更新
How to implement automatic view update as soon as there is change in database in AngularJs?
我正在使用带有Grails框架的AngularJs,并使用Mysql作为数据库。
我想实现像Facebook上发生的自动视图更新这样的功能。
到目前为止,我能够将JSON数据从Grails控制器发送到角度控制器并填充视图。
但是我如何实现像某些更改数据库的功能,并且视图实时更新而无需重新加载页面。
我凸轮穿过
"使用 $timeout 和 $http 每 X 毫秒轮询一次"
这对于实际应用是否有效?
请通过建议一些措施或 Angular 实现来解决我的问题来帮助我。
对于视图的"自动"更新,我使用了Grails Events Push Plugin,我建议您查看它。http://grails.org/plugin/events-push
将事件发送到浏览器并在客户端中收听它们并使用属性信息更新 AngularJS 范围非常容易。
例
一个角度的JS文件
window.grailsEvents = new grails.Events('http://myAppUrl.com', {enableXDR:true,readResponsesHeaders:false});
/**
* Module for listening to grails events
*/
angular.module('grailsEvents', []).factory('grailsEvents', function() {
return window.grailsEvents
});
window.myModule = angular.module('myModule',['grailsEvents'])
.run(function(){
grailsEvents.on('myEvent',function(data){
//Every time an event occurs, this will be executed
console.log(data);
});
});
MyEvents.groovy (in grails-app/conf)
events = {
'myEvent' browser:true
}
TestController.groovy (发送事件的控制器示例)
class TestController{
def index(){
event(topic:'myEvent',data:MyDomain.list())
}
}
如果您确实必须使用 MySQL,我建议您使用稍长的路由以牢记性能。您绝对不希望每 X 秒轮询一次。注释中指出的 SocketIO 方法是一个很好的方法。但是,您需要稍微扩展一下设计。
您将需要实现"主题"概念。例如,假设您有一个名为"水果"的页面,当有人发布有关水果的内容时,您希望自动更新该页面。所以你要做的是创建一个叫做/topics/fruits的"房间"(用 Socket.IO 术语来说),并让任何正在查看此页面的人"订阅"这个房间。接下来,当有人发布有关水果的内容时,您需要做的就是将这些新数据"推送"到/topics/fruit 房间,在该视图上的每个人都将获得更新。
既然你正在使用圣杯,这里有一些东西可以让你指出这一点:http://compiledammit.com/2012/09/05/websockets-and-grails-broadcasting-to-topics/。对于 AngularJS 部分,您可以在 http://www.html5rocks.com/en/tutorials/frameworks/angular-websockets/阅读并只实现 Socket.io 客户端部分。只需忽略该帖子中的 NodeJS 部分。
Eylen发布的例子就像一个魅力。此外,如果要侦听控制器中的事件并更新模型,请执行以下操作:
grailsEvents.on('myEvent', function (data) {
$scope.$apply(function(){
$scope.mymodel = data.someField;
});
});
- 如何使用动画实现纸张推车
- Javascript循环不会自我更新
- 如何在执行 Ajax 请求大量数据库更新时实现进度条
- 如何实现更新文章系统
- 实现已验证用户更新状态的最佳方式,作为对系统中已更改状态的反应.(ASP.NET MVC网站)
- 如何在 AngularJs 中的数据库发生变化时立即实现自动视图更新
- 实现具有快速更新脉冲响应的卷积混响
- 通过锚链接实现跳到主要内容技术时更新键盘焦点
- 最简单的实现方式是网页上的动态更新表(java/css)
- Highcharts:在数据实现时更新图表
- 频繁的轮询会使服务器过载吗?如果是的话;这是实现实时更新的最佳方式
- 如何在pouchdb中实现部分更新?
- 实现轮询Rails前端调用更新
- 如何实现一个方法来更新jquery插件中的选项
- Java' Rhino实现实现了哪个JavaScript (ECMAScript)版本(更新策略是什么?)
- 由于实现$mdDialog(材料设计),Angular没有更新循环
- 在Rails中实现AJAX调用复选框来更新数据库
- 如何在后台实现自动更新
- 如何在angularjs中实现基于其他对象的对象更新
- 我如何实现实时更新预览(例如Stack Overflow帖子)