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已經在進行中了。 –