从匿名函数访问控制器变量

时间:2015-12-05 20:05:30

标签: javascript angularjs node.js express socket.io

我正在编写一个AngularJS应用程序。 我需要从SQLite3数据库加载数据。我正在使用的架构是:我有一个使用express的Node.js服务器,它通过socket.io与angular.js应用程序通信。因此,我从客户端请求从数据库获取信息,服务器收集该信息并将其发送回客户端。

这里我试图初始化一个对象数组:main.meds(使用angular.js routeProvider,我将'MainCtrl'引用为'main'):

angular.module('medsOrmApp').controller('MainCtrl', function() {
  this.socket = io();
  this.meds = [];

  this.socket.emit('loadMeds', 'gimme the list !');
  this.socket.on('medsResponse', function(data) {
    console.log(data);

    for (var i = 0; i < data.length; i++) {
      var tmp = {};
      tmp.id = data[i].ID_MEDICAMENTO;
      tmp.nombre = data[i].NOMBRE_MEDICAMENTO;
      tmp.cantidad = data[i].CANTIDAD_DISPONIBLE;
      tmp.lab = data[i].LABORATORIO;
      meds.push(tmp); // ERROR: 'meds' is not defined
    }
  });
});

问题是我无法从匿名函数中访问'meds'。我试过medsthis.meds但没有成功。

1 个答案:

答案 0 :(得分:0)

如果您使用$scope

,这会不起作用
angular.module('medsOrmApp').controller('MainCtrl', function($scope, $timeout) {
  this.socket = io();
  this.meds = [];

  this.socket.emit('loadMeds', 'gimme the list !');
  this.socket.on('medsResponse', function(data) {
    console.log(data);

    for (var i = 0; i < data.length; i++) {
      var tmp = {};
      tmp.id = data[i].ID_MEDICAMENTO;
      tmp.nombre = data[i].NOMBRE_MEDICAMENTO;
      tmp.cantidad = data[i].CANTIDAD_DISPONIBLE;
      tmp.lab = data[i].LABORATORIO;
      this.meds.push(tmp); // ERROR: 'meds' is not defined
    }
  });
});

编辑:如何添加this.meds.push