【问题标题】:Can't get $translate service from angular-translate to change dropdown array for ngDropdowns无法从 angular-translate 获取 $translate 服务以更改 ngDropdowns 的下拉数组
【发布时间】:2014-09-18 19:55:41
【问题描述】:

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 获取语言字符串的变量时不会。

这是带有下拉菜单的按钮的控制器。注释在多行中描述了有效和无效的内容。

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
}]);

我是新手,但 $translate 服务不应该在控制器中工作。假设这是真的,必须改变什么才能让改变发生。我最近在按钮的 HTML 中添加了 ng-click,但它本身没有任何影响。

【问题讨论】:

  • 我发现了一些小进步。当 $scope.getCurrenLanguage 的第 3 行代码更改为 $scope.getCurrentLanguage = function(){ 时,该函数内的所有代码行都开始执行。但是,我还不清楚 return 声明。问题没有解决,因为 $scope.ddMenuOptions 不起作用,但它向前迈出了一步。有人可以解释为什么从函数参数中删除 $translate (仅在 3d 代码行中)允许执行这些 Angular 语句吗?这对我来说是个谜。

标签: javascript angularjs angular-translate


【解决方案1】:

我开始怀疑 OP 中倒数第二行没有执行。执行之前的行,执行之后的行,但它周围的 alerts() 很奇怪。所以我把那条线放在函数中,它起作用了。这是修改后的工作代码。

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 必须在函数内部感到困惑。但它有效,而且非常简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-02
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 2017-12-14
    • 1970-01-01
    相关资源
    最近更新 更多