AngularJS视图在控制器';在';解雇

AngularJS视图在控制器';在';解雇,angularjs,Angularjs,我有以下控制器: joolaControllers.controller('dsCtrl', function ($scope, dsService, socket) { dsService.getList(); socket.on('datasources/list:done', function (list) { $scope.list = list.datasources; }); }); 及以下服务: var joolaServices = angular.mo

我有以下控制器:

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对象):

我的HTML(翡翠):

名单没有显示出来

两个问题:

  • 我应该这样写服务/控制器吗?从这个意义上讲,角度是非常令人困惑的
  • 为什么
    {{list}}
    没有显示

  • 这是一个回调问题,我将代码更新为以下内容,现在可以正常工作了:

    控制器:

    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);
          })  
        });
      };
    });
    

    插座是什么样子的?我猜您正在处理的服务存在内部/外部问题,在某些情况下,
    $apply
    是必要的,而在其他情况下则不是。如果看不到
    套接字
    代码,就无法确定。此外,您肯定不想在控制器中侦听套接字响应。您需要将代码的结构设置为更像
    $scope.list=dsService.getList()或使用承诺:`dsService.getList().then(函数(list){$scope.list=list;})@BrianGenisio我在问题中添加了套接字代码。我尝试包装这行
    $scope.list=list.datasources$apply
    执行code>,但收到一条错误消息,说明$apply已在进行中。。
    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);
          })  
        });
      };
    });