Wynik $http.get
jest niedostępny podczas inicjalizacji aplikacji. Jest dostępny tylko wtedy, gdy serwer go dostarczy. Z tego powodu po prostu utrzymanie tej wartości w stałej modułu jest niemożliwe. Ryzykujesz jednak, że możesz
Możesz jednak zawinąć połączenie do usługi $http.get
i wprowadzić tę usługę, gdziekolwiek chcesz. (Należy pamiętać, że usługi nie mogą być wstrzykiwane w blokach konfiguracyjnych.)
// 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;
});
});
Tryb nieco niewygodne, aby uzyskać dostęp wartość swojej almostConstant to ze względu na jego charakter asynchroniczny. Po prostu jest dostępny w nieokreślonym czasie, więc próba dostępu do niego w sposób synchroniczny może wprowadzić wiele subtelnych błędów czasowych.
Bardzo nieokreślonym sposobem jest wpisanie stałej w pliku JS bezpośrednio. W tej chwili Twój serwer może odpowiedzieć na żądanie o wartości 'url'
. Zamiast tego, można zrobić to odpowiedzieć na wezwanie do 'url.js'
z następujący ciąg:
angular.module('A').constant('theConstant', result);
gdzie wynik jest oczywiście swoją stałą. Na przykład, jeśli były przy użyciu PHP na backend mogłoby to wyglądać mniej więcej tak:
<?php
header('Content-Type: application/javascript');
$constant = retrieveMyConstant();
?>
angular.module('A').constant('theConstant', <?php echo $constant; ?>);
Upewnij się, że stała faktycznie wygląda wartości JavaScript. Jeśli jest to ciąg, zawinąć go w '
, czy jest to obiekt JSON napisać swoje serializacji itp
Po tym po prostu zawierać tag skryptu wskazując url.js
w pliku index.html
.
Zauważ, że to rozwiązanie jest synchroniczny, więc jeśli pobieranie stała na serwerze zajmuje trochę czasu, będzie to mieć wpływ na czas ładowania strony.
co jest 'theValueFromHttpCall'? – akonsu
@akonsu Zaktualizowano pytanie. W moim przypadku odpowiedź byłaby obiektem JSON. –
interesujące. Domyślam się, że wtryskiwacz ma już wszystkie komponenty zdefiniowane przy starcie, więc myślę, że konieczne jest, aby pracować z nim bezpośrednio, aby włączyć twój scenariusz. – akonsu