IDma88
@IDma88
Программист C++

Почему не устанавливается связь по ссылке с объектом из factory в controller?

Пишу приложение на AngularJS. Есть у меня контроллер (в упрощённом виде)
app.controller("orgsItemCtrl", function($scope, orgsItemService) {
	$scope.data	= orgsItemService.data;
	$scope.fn		= orgsItemService.fn;
}

и фабрика к нему (также приведена в упрощённом виде)
app.factory('orgsItemService', function($http) {
	var serviceObj	= {
		data	: {},
		fn	: {
			init	: function() {
				// Тут получаем данные с сервера через $http и сохраняем их в serviceObj.data
			}
		}
	};

	serviceObj.fn.init();
	return serviceObj;
}

Во view устанавливаю связь с полями объекта data из orgsItemCtrl.

В итоге оно не работает как задумывалось, т.к. data в orgsItemCtrl остаётся пустым объектом, даже после получения данных с сервера.
Если же перенести функционал из фабрики в контроллер, то всё работает. Пример работающего кода:
app.controller("orgsItemCtrl", function($scope, orgsItemService) {
	$scope.data	= {};
	$scope.fn		= {
		init	: function() {
			// Тут получаем данные с сервера через $http и сохраняем их в serviceObj.data
		}
	}
}

Так почему же не происходит связывание по ссылке в этом месте: $scope.data = orgsItemService.data;
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
Упустил самый важный момент в присваивании, каким образом меняешь данные при получении, если ты не модифицируешь существующий объект data а заменяешь его на новый, то вполне логично, что контроллер не видит замены.
Кроме того почитай вот это www.codelord.net/2016/11/23/spotting-outdated-angu...
Называешь orgsItemService а пытаешся сделать фабрику, кроме того ты отдаешь в фабрике обект а не екземпляр класса
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы