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

Javascript 从匿名函数访问控制器变量,javascript,angularjs,node.js,express,socket.io,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').cont

我正在编写一个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();
这个.meds=[];
this.socket.emit('loadMeds','gimmethelist!');
this.socket.on('medsResponse',函数(数据){
控制台日志(数据);
对于(变量i=0;i

问题是我无法从匿名函数中访问“meds”。我尝试了
meds
this.meds
,但没有成功。

如果使用
$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
    }
  });
});
angular.module('medsOrmApp').controller('MainCtrl',function($scope,$timeout){
this.socket=io();
这个.meds=[];
this.socket.emit('loadMeds','gimmethelist!');
this.socket.on('medsResponse',函数(数据){
控制台日志(数据);
对于(变量i=0;i

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

尝试将this保存在另一个变量(例如,var=this)中,然后在匿名函数中使用this.meds它与控制器开头的
var=this
一起工作!非常感谢你,Julien。看来他想使用“controller as”syntax是的,我已经用yeoman生成了这个项目,并且是这样配置的,不需要切换到
$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
    }
  });
});