Я пытаюсь предоставить доступ к файлу json, который содержит информацию о конфигурации для моего проекта (например, номер версии, имя проекта, основной контакт и т. д.). Я создал фабрику, которая извлекает файл json с помощью http.get, затем я могу вытащить это данные в мой контроллер, но я не могу получить к ним доступ из любого места в контроллере.
Я не писал фабрику, я нашел ее как ответ на вопрос другого человека, и она почти полностью скопирована, поэтому, если это неправильный способ выполнить то, что я пытаюсь сделать, пожалуйста, поправьте меня.
вот завод:
app.factory('configFactory', ["$http", function($http) {
var configFactory = {
async: function() {
// $http returns a promise, which has a then function, which also returns a promise
var promise = $http.get('assets/json/config.json').then(function(response) {
// The then function here is an opportunity to modify the response
console.log(response.data.config);
// The return value gets picked up by the then in the controller.
return response.data.config;
});
// Return the promise to the controller
return promise;
}
};
return configFactory;
}]);
и вот мой контроллер:
app.controller('footerController', ['$scope', '$rootScope', 'configFactory', function footerController($scope, $rootScope, configFactory) {
var body = angular.element(window.document.body);
$scope.onChange = function(state) {
body.toggleClass('light');
};
configFactory.async().then(function(d) {
$scope.data = d;
// this console log prints out the data that I am trying to access
console.log($scope.data);
});
// this one prints out undefined
console.log($scope.data);
}]);
Таким образом, по сути, у меня есть доступ к данным внутри функции, используемой для их извлечения, но не за ее пределами. Я могу решить эту проблему с помощью rootScope, но я стараюсь этого избегать, потому что считаю это бинтом, а не правильным решением.
Любая помощь была бы здоровой, но это мой первый опыт работы с http.get и promises и всем этим, поэтому подробное объяснение было бы очень признательно.
[EDIT 1] Переменными из файла конфигурации нужно будет управлять в веб-приложении, поэтому я не могу использовать константы.
then
, потому что первыйconsole.log
вызывается до завершения запроса. Вот как работает асинхронный код. - person Estus Flask   schedule 10.06.2016configFactory
внутри обратного вызоваthen
, это так просто. - person Estus Flask   schedule 10.06.2016