2014-09-24 42 views
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(); 
    }; 
    } 
]); 

​​3210

我加了一個刷新按鈕,以表明$ translate.refresh()頁面加載後的作品。

我在想什麼?

回答

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

感謝詹姆斯,這是完全的問題。以及使用$ scope的時間和原因的一個很好的例子。$ evalAsync()。這正是我所期待的。奇怪的是它沒有內置到$ translate.refresh()方法中。 – user3606027 2014-09-24 22:39:02

+0

它可能沒有內置到翻譯刷新中,因爲它並不總是需要的。就像我所說的,我根本沒有看到$ translate模塊,但我的猜測是,在生命週期的早些時候調用了$ translatePartialLoader.addPart('test')(也許在模塊運行階段),然後$ evalAsync可能不是必需的。無論如何,很高興我能幫上忙。儘可能的時候不要忘記接受答案。 – James 2014-09-24 22:46:04

+0

它對我的運動員有效,但不適用於我的應用程序。正如你所說,這當然是一個計時的事情。正在加載部分之前調用刷新。 – user3606027 2014-09-25 00:35:19