0

我正在使用 angular-traslate-partial-loader 测试 Angular-translate,它没有在页面加载时使用默认翻译填充页面。

这是重新创建的问题的一个plunkr

app.controller('MainCtrl', ['$scope', '$translate', '$translatePartialLoader',
  function($scope, $translate, $translatePartialLoader) {
    $translatePartialLoader.addPart('test');
    $translate.refresh();
    $scope.dotranslate = function() {
      $translate.refresh();
    };
  }
]);

http://plnkr.co/edit/Vts9CW4VoJsXoSdllFsq?p=preview

我添加了一个刷新按钮来显示 $translate.refresh() 在页面加载后工作。

我错过了什么?

4

1 回答 1

3

我从来没有使用过 $translate 所以我不确定问题到底出在哪里,但是您可能在摘要周期中更改值太晚,以至于刷新无法捕捉到它。

您可以使用 $scope.$evalAsync 来解决此问题。请参阅此处的角度文档:https ://docs.angularjs.org/api/ng/type/$rootScope.Scope

这是您的 app.js 的示例,其中包含更改:

var app = angular.module('plunker', ['pascalprecht.translate']);
app.config(function run($translateProvider, $translatePartialLoaderProvider) {
  $translateProvider.useLoader('$translatePartialLoader', {
    urlTemplate: 'translation-{lang}-{part}.json'
  });

  $translateProvider.preferredLanguage('fr-FR');
});
app.controller('MainCtrl', ['$scope', '$translate', '$translatePartialLoader',
  function($scope, $translate, $translatePartialLoader) {
    $translatePartialLoader.addPart('test');

    //I wrapped your refresh in the eval async function
    $scope.$evalAsync(function() {
      $translate.refresh();
    });

    $scope.dotranslate = function() {
      $translate.refresh();
    };
  }
]);
于 2014-09-24T21:18:38.100 回答