У меня есть контроллер и фабрика для обработки списков. Контроллер должен получить списки, загруженные фабрикой, и отобразить их в представлении. Я не могу иметь метод getLists() на заводе, потому что он должен асинхронно загружаться из FireBase. Вот мой контроллер код-Угловые асинхронные вызовы - обновляющий контроллер?
angular.module('myApp.controllers', []).
controller('ListCtrl', ["$scope","listFactory", function($scope, ListFactory) {
$scope.lists = [];
$scope.$on("list_update", function(snapshot)
{
console.log(snapshot);
});
}]).
controller("EditListCtrl", ["$scope","listFactory", function($scope, ListFactory)
{
$scope.name = "";
$scope.items = [];
$scope.itemCount = 10;
$scope.save = function()
{
var List = {"items":[]};
for(var i = 0; i < $scope.itemCount; i++)
{
var item = $scope.items[i];
if(item != null)
{
List.items.push(item);
}
else
{
alert("Please fill all items of the list.");
return false;
}
ListFactory.putList(List);
$scope.items = [];
$scope.name = "";
}
}
}]);
listFactory выглядит this-
angular.module("myApp.factories", [])
.factory("listFactory", [function()
{
var lists = [{"name":"test"}];
var ListRef = new Firebase("https://listapp.firebaseio.com/");
var factory = {};
factory.getLists = function()
{
// this won't work
}
factory.putList = function(List)
{
ListRef.child("lists").push(List);
}
ListRef.on("child_added", function(snapshot)
{
// How do I get this back to the controller???
});
return factory;
}]);
ListRef направит в «child_added» событие, где снимок аргумент содержит данные списка. Мне нужно как-то вернуть его к контроллеру. Я хотел бы сделать это с помощью событий, но я не уверен, как это сделать между фабрикой и контроллером. Я не хочу использовать корневую область, потому что я думаю, что это плохая практика.
Я новичок в этом - любая помощь будет оценена!
effing magic ... –
Я также рекомендую вам ознакомиться с этим: http://jimhoskins.com/2012/12/14/nested-scopes-in-angularjs.html –
Хорошо, что это работает, но только если Я начинаю манипулировать просмотром. Когда страница загружается, он должен вытащить 2 списка, но это происходит только тогда, когда я начинаю вводить текст в одном из полей ввода. Любая идея почему? –