Я новичок в AngularJS и все еще придерживаюсь основ.
Я создаю службу с $ http.get для загрузки нескольких Json-файлов. Когда я загружаю службу в контроллер, я получаю пустые массивы.
Это моя служба
app.service('productService', ['$http', function($http){
var lista = this;
lista.products = [];
lista.menu = [];
$http.get('/prodotti_1.json').success(function(data){
lista.products = data;
});
$http.get('/menu_1.json').success(function(data){
lista.menu = data;
});
}]);
И это мой контроллер:
app.controller('ProductController', ['productService', function(productService){
console.log(productService.products);
console.log(productService.menu);
}]);
Консоль печатает только пустой массив []. Если я положил console.log (данные) в обещание успеха, console.log печатает массив просто отлично. Я думал, что из кодовой школы это может быть проще, но я думаю, что мне не хватает точки, чтобы передать данные из обещания успеха контроллеру. Во многих других ситуациях я вижу использование переменной $ scope, но я узнал, что я также могу избежать использования, если я использую «это». Так вот, мой код не отображает никаких $ scope.
Я использую Angular 1.4.1 FYI, и я видел много форумов и других вопросов, но это похоже на другую ситуацию.
Спасибо
Проблема в том, что вы загружаете свои данные асинхронно. То есть ваш список не назначается при вызове функции console.log. $ http.get не блокируется до тех пор, пока данные не будут доступны. –
у вас отсутствует концепция обещания $ q: обещания асинхронны, поэтому, если вы поместите инициализацию внутри контроллера console.log, вы будете печатать только начальное значение, создать привязку или наблюдателя и проверить, что значения установлены – fantarama