Доступ к переменной контроллера из анонимной функции

0

Я кодирую приложение AngularJS. Мне нужно загрузить данные из базы данных SQLite3. Архитектура, которую я использую для этого: у меня есть сервер Node.js, использующий функцию экспресс, которая связывается с приложением angular.js через socket.io. Итак, я делаю петицию от клиента, чтобы получить информацию из базы данных, сервер собирает эту информацию и отправляет ее клиенту.

Здесь я пытаюсь инициализировать массив объектов: 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 и this.meds без успеха.

  • 0
    попытайтесь сохранить ваш this в другой переменной (например, var = this), а затем используйте that.meds в анонимной функции
  • 0
    Он работал с var that = this в начале контроллера! Большое спасибо, Жюльен.
Теги:
express
socket.io

1 ответ

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

edit: как насчет добавления this.meds.push?

  • 0
    кажется, он хочет использовать синтаксис «контроллер как»
  • 0
    да, я сгенерировал проект с помощью yeoman, и он настроен таким образом, нет необходимости переключаться на синтаксис $scope

Ещё вопросы

Сообщество Overcoder
Наверх
Меню