Результат $http.get
не доступен, когда приложение инициализировано. Он доступен только тогда, когда сервер доставляет его. По этой причине простое сохранение этого значения в постоянном модуле невозможно. Вы рискуете
Что вы можете сделать, однако, оберните вызов $http.get
в службу и приложите эту услугу, где бы вы ни находились. (Обратите внимание, что услуги не могут быть введены в конфигурации блоков.)
// grab the "constant"
angular.module('A').factory('almostConstant', function() {
return $http.get('url').then(function(response) {
return response.data;
});
});
// use the "constant"
angular.module('A').controller('controller', function($scope, almostConstant) {
almostConstant.then(function(data){
$scope.almostConstant = data;
});
});
слегка неудобный режим для доступа к значению вашего almostConstant связано с его асинхронной природы. Он просто доступен в неуказанное время, поэтому попытка получить доступ к нему синхронно может привести к множеству тонких ошибок времени.
Очень не угловатым способом сделать это было бы написать вашу константу в JS-файле напрямую. На данный момент ваш сервер может ответить на запрос 'url'
со значением. Вместо этого, вы можете сделать это ответить на запрос 'url.js'
со следующей строкой:
angular.module('A').constant('theConstant', result);
, где результат, очевидно, ваша постоянная. Например, если вы используете PHP на серверном это может выглядеть примерно так:
<?php
header('Content-Type: application/javascript');
$constant = retrieveMyConstant();
?>
angular.module('A').constant('theConstant', <?php echo $constant; ?>);
Убедитесь, что константа на самом деле выглядит как значение JavaScript. Если это строка, завернуть его в '
, если это объект JSON написать свою сериализацию и т.д.
После этого вы просто включить скрипт тег, указывающий на url.js
в файле index.html
.
Обратите внимание, что это решение синхронно, поэтому, если получение константы на сервере занимает некоторое время, это повлияет на время загрузки страницы.
что 'theValueFromHttpCall'? – akonsu
@akonsu Обновлен вопрос. В моем случае ответом будет объект JSON. –
интересный. Я бы предположил, что у инжектора уже есть все компоненты, определенные при загрузке, поэтому я думаю, что нужно работать с ним напрямую, чтобы включить ваш сценарий. – akonsu