2013-11-28 47 views
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}} 

该列表未显示。

两个问题:

  1. 这是我应该如何写服务/控制器? Angular在这个意义上非常混乱。
  2. 为什么{{list}}没有显示?
+1

什么'socket'看起来像?我猜测你正在处理的服务存在内部/外部问题,在某些情况下,'$ apply'是必要的,而在其他情况下,则不是。不能确定没有看到'套接字'代码。 –

+0

另外,你当然不希望在你的控制器中侦听套接字响应。你将想要构造代码来读取更多像'$ scope.list = dsService.getList();'或使用promises:'dsService.getList()。then(function(list){$ scope.list = list;} ); –

+0

@BrianGenisio我已经将套接字代码添加到了我的问题中。我尝试用''apply''包装这一行''scope.list = list.datasources;'',但得到一个错误消息,说明$ apply已经在进行中了。 –

回答

0

这是一个回调的问题,我在我的代码更新到下面的,现在可:

控制器:

joolaControllers.controller('dsCtrl', function ($scope, dsService) { 
    dsService.getList(function(list) { 
    $scope.list = list; 
    }); 
}); 

服务:

joolaServices.service('dsService', function (socket) { 
    this.getList = function (callback) { 
    joolaio.objects.datasources.list(function() { 
     socket.on('datasources/list:done', function(list) { 
     callback(list.datasources); 
     }) 
    }); 
    }; 
}); 
相关问题