angular-translate正在改变我的HTML。我有一组ngDropdown按钮指令的选择项,也必须更改。更改语言后,我尝试使用translate.use()获取新的/当前语言。有些东西不起作用。
这是HTML
<div id="postBox" class="floatingSection" data-ng-controller="postButtonController2">
<button id="postButton" dropdown-menu="ddMenuOptions" dropdown-model="ddMenuSelected" class="btn-menu" ng-click="getCurrentLanguage()">{{ 'POST' | translate }}</button>
</div>
这是postButton的控制器。它应该从$ translate获取新的/当前语言并使用该字符串来获取下拉选择数组,ddSelections.withLangChoice $ scope.getCurrentLanguage在硬编码时选择正确的数组,但在从$ translate获取语言字符串的变量时则不行。 / p>
这里是带下拉按钮的控制器。评论描述的是有用的东西和不在几行上的东西。
residenceApp.controller('postButtonController2', ['$translate', '$scope', 'changePostDdFactory',
function ( $translate, $scope, ddSelections ){
//ddSelections is the result object from the function returned by changePostDdFactory
$scope.getCurrentLanguage = function( $translate ){
alert('here I am in postButtonController2'); //fires on post button clicks and on page load
alert('here I am in postButtonController2' + $translate.use()); //does not fire on post button clicks. fires on page load
$scope.langKey=$translate.use(); //gets langKey in $translate on page load only
$translate.refresh($scope.langKey);//should refresh the translation, but nothing
alert('from postButtonController2 - currentLanguage is' + ' ' + $translate.use() ); //does not fire on button click. fires on page load
//return 'es'; //hardcoded works on page load & sets ddSelections.withLangChoice to es array
return $translate.use(); //sets language for ddSelections on page load, no language changes
};
$scope.ddMenuOptions = ddSelections.withLangChoice($scope.getCurrentLanguage($translate)); //works on page load, no language change occurs
$scope.ddMenuSelected = {};
//working code to watch for change from user selection
}]);
我是新手,但不应该在控制器中翻译服务工作。假设这是真的,必须改变才能发生变化。我最近添加了ng-click到按钮的HTML,但它本身没有任何影响。
答案 0 :(得分:0)
我开始怀疑OP中的2d到最后一行没有执行。它执行前的行,执行后的行,但它周围的alert()是奇怪的。所以我将该行放在函数中,并且它有效。这是修订后的工作代码。
residenceApp.controller('postButtonController2', ['$translate', '$scope', 'changePostDdFactory',
function ( $translate, $scope, ddSelections ){
var ddSelections;
//ddSelections is the result object from the function returned by changePostDdFactory
$scope.getCurrentLanguage = function(){
$scope.langKey=$translate.use(); //use() as a getter
$scope.ddMenuOptions = ddSelections.withLangChoice($scope.langKey);
return;
};
$scope.ddMenuSelected = {};
//code to watch for change from user selection
}]);
我仍然对为什么$ scope.getCurrentLanguage仅作为匿名函数工作以及为什么$ scope.ddMenuOptions必须在函数内部时仍然感到困惑。但它很有效,而且很简单。