J'ai lu beaucoup d'informations sur SO que je ne peux pas avoir $http
appeler dans config mais ce que je peux faire est de créer son propre fournisseur et utiliser ce fournisseur dans une config.
Mais aucun des sujets que j'ai lus ne montre comment utiliser réellement les informations rassemblées dans le fournisseur d'appel API dans un config()
.
Ainsi, le fournisseur que j'ai créé est la suivante:
(function() {
'use strict';
angular
.module('app', [])
.provider('translateOwnProvider', Provider);
function Provider() {
this.$get = function($http) {
$http({
url: 'http://ipinfo.io/json',
method: 'GET'
})
.then(function(response) {
var homeCountry = response.data.country;
var homeCountryLower = homeCountry.toLowerCase();
console.log(response.data);
}, function(errorCall) {
console.log("error");
});
return homeCountryLower;
// ?????
};
};
})();
Ainsi, dans la ligne 23 (en bas du script) je retourne valeur, je ne sais pas si c'est en fait une bonne façon de le faire, il est le premier temps que j'ai essayé et j'ai besoin de votre aide les gars.
suivant dans le fichier config nommé app.js
vraiment commun que j'ai config avec
- routage
- définir un lenguage d'utilisateur
le code est:
(function() {
'use strict';
angular
.module('app', [
'ngRoute',
'pascalprecht.translate'
])
.config(config);
//$inject for minify issue
config.$inject = ['$routeProvider', '$translateProvider', 'translateOwnProvider'];
function config ($routeProvider, $translateProvider, translateOwnProvider) {
$routeProvider
.when('/', {
controller: 'mainCtrl',
templateUrl: 'views/main.html'
})
.otherwise('/');
// add translation tables
$translateProvider.translations('en', translationsEN);
$translateProvider.translations('de', translationsDE);
$translateProvider.translations('pl', translationsPL);
// preferredLanguage is gather should be gather in provider
$translateProvider.preferredLanguage('en');
$translateProvider.fallbackLanguage('en');
//fallbackLanguage in case somebody hides his IP
};
})();
En ligne 28 Je mets une langue preffered et je veux que ceci soit une valeur retournée dans propre provi der: homeCountryLower
.
Pour l'instant je n'ai aucune erreur dans la console mais cela ne fonctionne pas évidemment et la page ne charge pas du tout, il reste vide.
* Mais aucun des sujets que j'ai lus ne montre comment utiliser réellement les informations rassemblées dans l'appel d'API dans le fournisseur à l'intérieur d'un fichier config() * - parce que vous ne le pouvez pas.Même si vous le pouviez, cela créerait une condition de concurrence car la requête HTTP est asynchrone. – estus
Il n'y a donc pas de solution pour définir une langue utilisateur préferée en se basant sur l'adresse IP de l'utilisateur? – BT101
Utilisez le résolveur de route, comme la réponse le suggère. – estus