Pas*_*yer 8 javascript websocket socket.io angularjs
我试图在从服务器推送websocket之后改变我的角度模型.$scope.contacts
每次服务器提供新数据时,如何更改值?
我不确定是否可以使用$apply
.我知道我可以访问DOM元素检索范围然后更改值,但应该有更好的解决方案!
我真的对从外部更新角度模型而不创建角度模块的解决方案感兴趣,因为我正在使用发出更改事件的相对数据源.有没有简单的方法可以像Backbone.js那样做,你可以说:
var book = new Backbone.Model({ title: 'value' });
book.set("title", "A Scandal in Bohemia");
Run Code Online (Sandbox Code Playgroud)
我想要的angularjs是这样的:
function MyController($scope) {
$scope.contacts = [];
}
datasource changed -> function () {
MyController.set('contacts', 'value'); // change angular scope property
}
Run Code Online (Sandbox Code Playgroud)
Max*_*ach 11
看看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);
}
});
})
}
};
}]);
Run Code Online (Sandbox Code Playgroud)
和控制器使用它:
angular.module('app')
.controller('Controller', ['$scope', 'socket', function ($scope, socket) {
socket.emit('register')
socket.on('register', function (data) {
$scope.data = data;
});
}]);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10056 次 |
最近记录: |