Я кодирую приложение 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
без успеха.
Не будет ли это работать, если вы используете $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
?
$scope
var that = this
в начале контроллера! Большое спасибо, Жюльен.