我已经阅读了很多关于SO的信息,我无法$http
调用内部配置,但我可以做的是创建自己的提供程序并在配置中使用此提供程序。
但我读过的主题都没有显示如何在config()
内的提供程序中实际使用API调用中收集的信息。
所以我创建的提供者就是这样:
(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;
// ?????
};
};
})();
所以在第23行(脚本的底部)我返回值,我不知道它是否真的是一个很好的方法,这是我第一次尝试这个并需要你的帮助。
接下来在名为really common app.js
的配置文件中,我有
代码是:
(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
};
})();
在第28行,我设置了一个prefferedLenguage,我希望这是一个在自己的提供者中返回的值:homeCountryLower
。
目前我在控制台中没有任何错误,但这显然不起作用,页面根本没有加载,它保持空白。
答案 0 :(得分:1)
我建议你把api调用解决这个问题。这将确保您的git reflog local
,直到服务调用完成。
app/main controller is not instantiated
现在,您可以resolve: {
translateService: function($http, $route){
return $http.get('http://ipinfo.io/json')
.then(function(response){
return response.data;
})
}
}
控制器中的inject
并将其设置为translateService
,您可以在整个应用程序中重复使用它,因为它本质上是单身。
答案 1 :(得分:0)
我得出的结论是,无法在config()
中使用来自后端呼叫的收集信息。也许有可能使用某种具有resolve
功能的黑客,但我无法弄明白。
我在window.navigator.language
中使用config()
代替此次调用,所以现在我的翻译脚本不是基于用户IP,而是基于用户浏览器语言。它不如IP那么令人满意,因为我仍然可以拥有来自波兰的用户并将浏览器设置为英语,然后我的页面将以英语显示。
我也可以编写自己的服务,为我翻译页面,但我真的想使用angular-translate模块:link to module。
请注意,我使用的是window.navigator.language
而不是$window
,因为第二个问题在config()
中也无法实现。所以我的解决方案在测试过程中可能会出现一些问题。
我为将来会涉及这个话题的人写了这个。