0
我有以下的控制器:AngularJS '上' 烧制后控制器视图中未更新
joolaControllers.controller('dsCtrl', function ($scope, dsService, socket) {
dsService.getList();
socket.on('datasources/list:done', function (list) {
$scope.list = list.datasources;
});
});
和以下服务:
var joolaServices = angular.module('ngjoola.services', ['ngjoola']);
joolaServices.service('dsService', function (socket) {
this.getList = function() {
return joolaio.objects.datasources.list();
};
});
socket
的定义如下(joolaio.io.socket是一个socket.io对象):
ngjoola.factory('socket', function ($rootScope) {
var socket = joolaio.io.socket;
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);
}
});
})
}
};
});
我的HTML(玉):
.box-content(ng-controller="dsCtrl")
| {{list}}
该列表未显示。
两个问题:
- 这是我应该如何写服务/控制器? Angular在这个意义上非常混乱。
- 为什么
{{list}}
没有显示?
什么'socket'看起来像?我猜测你正在处理的服务存在内部/外部问题,在某些情况下,'$ apply'是必要的,而在其他情况下,则不是。不能确定没有看到'套接字'代码。 –
另外,你当然不希望在你的控制器中侦听套接字响应。你将想要构造代码来读取更多像'$ scope.list = dsService.getList();'或使用promises:'dsService.getList()。then(function(list){$ scope.list = list;} ); –
@BrianGenisio我已经将套接字代码添加到了我的问题中。我尝试用''apply''包装这一行''scope.list = list.datasources;'',但得到一个错误消息,说明$ apply已经在进行中了。 –