У меня есть пользовательская переменная на фабрике, которая продолжает оставаться неопределенной после переключения контроллеров. Я устанавливаю переменную в одном контроллере. Когда я регистрирую пользователя, он появляется с данными, которые я ожидаю, но когда я переключаю контроллеры и извлекаю переменную, он снова не определен. Вот код:Заводская переменная AngularJS становится неопределенной
discussionBoard.factory('userFactory', function($http){
console.log("I'm loading the userFactory");
var user = {};
var factory = {};
factory.createUser = function(user, callback){
$http.post('/users/new', {user: user})
.success(function(response){
user = response[0];
callback(user);
})
}
factory.retrieveUser = function(callback){
callback(user);
}
console.log(user);
return factory;
});
discussionBoard.controller('dashCtrl', function($scope, topicFactory, userFactory){
$scope.createTopic = function(){
topicFactory.createTopic(function(topic){
$scope.topic = topic;
})
}
userFactory.retrieveUser(function(user){
$scope.user = user;
});
});
EDIT: После того, как немного больше экспериментировать, я был в состоянии получить эту работу путем добавления пользователя в качестве объекта в пределах объекта фабрики. Однако на самом деле возникает еще один вопрос о том, как здесь взаимодействует фабрика с AJAX, поскольку, кажется, .success() не имеет доступа к области завода. Вот код, который работал, но я бы интересно, если кто-то может сказать, почему это устроено таким образом:
discussionBoard.factory('userFactory', function($http){
var factory = {};
factory.createUser = function(user, callback){
$http.post('/users/new', {user: user})
.success(function(response){
factory.user = response[0];
callback(factory.user);
})
}
factory.user = {};
factory.retrieveUser = function(callback){
callback(factory.user);
}
return factory;
});
discussionBoard.controller('dashCtrl', function($scope, topicFactory, userFactory){
$scope.createTopic = function(){
topicFactory.createTopic(function(topic){
$scope.topic = topic;
})
}
userFactory.retrieveUser(function(user){
$scope.user = user;
});
});
Создайте услугу Singleton. Вот ссылка (описать 4 разных способа создания singleton в AngularJS): http://blog.jdriven.com/2013/03/how-to-create-singleton-angularjs-services-in-4-different-ways/ – Tomislav