Angularjs模型在服务器推送websocket数据后发生了变化
Angularjs model changes after websocket data push from server
在服务器推送websocket后,我试图更改角度模型。每次服务器提供新数据时,如何更改$scope.contacts
等值。。?
我不确定使用$apply
是否可行。我知道我可以访问DOM元素,检索范围,然后更改值,但应该有更好的解决方案!
我对一种从外部更新角度模型而不创建角度模块的解决方案非常感兴趣,因为我使用的是发出变化事件的相对数据源。有没有一种简单的方法可以做到这一点,比如在Backbone.js中,你可以说:
var book = new Backbone.Model({ title: 'value' });
book.set("title", "A Scandal in Bohemia");
我想要angularjs的东西是:
function MyController($scope) {
$scope.contacts = [];
}
datasource changed -> function () {
MyController.set('contacts', 'value'); // change angular scope property
}
查看socket.io角服务:
angular.module('app')
.factory('socket', ['$rootScope', function ($rootScope) {
var socket = io.connect();
return {
on: function (eventName, callback) {
socket.on(eventName, function () {
var args = arguments;
$rootScope.$apply(function () {
callback.apply(socket, args);
});
});
},
emit: function (eventName, data, callback) {
socket.emit(eventName, data, function () {
var args = arguments;
$rootScope.$apply(function () {
if (callback) {
callback.apply(socket, args);
}
});
})
}
};
}]);
以及使用它的控制器:
angular.module('app')
.controller('Controller', ['$scope', 'socket', function ($scope, socket) {
socket.emit('register')
socket.on('register', function (data) {
$scope.data = data;
});
}]);
就像下面一样
socket.onmessage = function (event) {
scope.$apply(function(){
// modify scope values here
}
};
好吧,标记的答案肯定不是OP要求的"简单方法"。这里有一个简单得多的解决方案。
在您自己的JavaScript代码中检索任意范围:
var scope = angular.element($("#elementID")).scope();
更改Angular $scope
变量中的值,但从外部JavaScript:
scope.$apply(function() {
scope.yourArrayForExample.push({name: 'New, external value'});
});
这是一个JSFiddle。
相关文章:
- Json在完整日历中对数据进行了编码
- 在p:dataScroller中添加的数据丢失了Javascript函数
- 为什么属性存在于对象实例上,即使其原型发生了更改
- Javascript函数 - 通过引用复制,但这里发生了什么
- 控制器切换后匿名功能中的访问服务数据发生变化
- 使用 jquery 发布 JSON 数据给了我空变量
- 套接字发生了什么's在'断开连接'事件(服务器端)
- 这段代码中发生了什么
- Wamp没有识别出我的代码发生了更改
- 如何检查输入框值在使用淘汰之前是否发生了更改
- 通过它访问HTML元素's id DIRECTLY-这里发生了什么
- window.opener引用在Java 1.7.0_04-b20中从Applet重定向期间发生了更改,但在1.7.0_
- 如何知道JS对象属性的值在哪一行发生了更改
- 查找表单的哪些特定部分在输入时发生了更改
- JavaScript's数组过滤器函数在没有分配函数的情况下使用-这里发生了什么
- 当后端数据发生更改时,如何在AngularJs中更新localforge
- 隐藏提交按钮,除非表单/输入数据发生了变化
- react.js如何知道数据发生了变化?
- Angularjs模型在服务器推送websocket数据后发生了变化
- javascript画布.与原始数据URI相比,toDataURL发生了变化