【发布时间】:2016-07-27 20:58:41
【问题描述】:
我正在用 AngularJS 建立一个网站。我遇到了翻译问题,得到了一个或多或少可行的解决方案,但我认为它可以做得更好。
我有一个从数据库加载翻译的主控制器。
$http.get($rootScope.ApiUrl + '/?a=sprache&lang=' + $rootScope.lang).success(function (data) {
$scope.spr = data;
$rootScope.translations = data;
$rootScope.updateTranslations();
});
data 是一个格式如下的数组:
{key: "translation",…}
此外,我对每个州都有一个控制器。我希望它可以做这样的事情:
app.controller('InventoryCtrl', [
'$scope',
'$http',
'$location',
'$state',
'$stateParams',
'$rootScope',
'$uibModalStack',
function ($scope, $http, $location, $state, $stateParams, $rootScope, $uibModalStack) {
$scope.title = $rootscope.translations.myTranslatedTitleForThisState
]);
显然这不起作用,因为在调用此代码之前 get-request 尚未完成,因此未设置 $rootscope.translations 变量。
相反,我写了以下内容。成功完成 get-request 后,从 MainController(上图)中的 loadTransition() 函数调用 updateTranslations() 函数。
app.controller('InventoryCtrl', [
'$scope',
'$http',
'$location',
'$state',
'$stateParams',
'$rootScope',
'$uibModalStack',
function ($scope, $http, $location, $state, $stateParams, $rootScope, $uibModalStack) {
$rootScope.updateTranslations = function() {
$rootScope.setMetaTags($rootScope.translations.inventory_title, $rootScope.translations.inventory_description);
$rootScope.updateTranslations();
}
}
]);
我很确定这可以做得更好。有什么想法吗?
【问题讨论】:
标签: javascript angularjs asynchronous angularjs-scope translation