2016-09-16 131 views
0

我想在服务中使用angular translate。我试图使用translatePartialLoader加载它,然后刷新,但没有成功我得到空的对象在视图中。以下是我的代码。

***服务*

angular 
     .module('common') 
     .factory('ConversationService', conversationService); 

     function conversationService($translate, $translatePartialLoader) { 

     $translatePartialLoader.addPart('home'); 
     $translate.refresh(); 

     var asdsa; 

     asdsa = $translate('home.test'); 
     console.log(asdsa); 


     /* Tried with then also no success.. 
     $translate("home").then (function (home) { 
      asdsa = home; 
      console.log(asdsa); 
     });*/ 
} 

})();

app.js在那里我定义$翻译

angular.element(document).ready(function() { 
    angular.bootstrap(document, ['app']); 
    }); 

    function config($stateProvider, $urlRouterProvider, $logProvider, $httpProvider, $translateProvider) { 
    $urlRouterProvider.otherwise('/login'); 
    $logProvider.debugEnabled(true); 
    $httpProvider.interceptors.push('httpInterceptor'); 
    $translateProvider.useLoader('$translatePartialLoader', { 
     urlTemplate: '/src/app/modules/{part}/resources/{lang}.json' 
    }); 

    $translateProvider.preferredLanguage('en'); 

en.json文件

{ 
    "home" :{ 
    "test": "Teeeeeeeeeeeeeeeeeeest", 
    } 
} 

在控制器我正在使用的决心方法translatePartialLodaer和工作,但这种方式在那里我需要服务,它不工作。以下是我在使用的路线中的使用方法。

 resolve: { 
       translatePartialLoader: ['$translate', '$translatePartialLoader', function ($translate, $translatePartialLoader) { 
        $translatePartialLoader.addPart('home'); 
        return $translate.refresh(); 
       }] 
       } 

回答

0

$翻译是异步FN,你应该使用它像

$translate('token.token2').then(function(translation){ 
}); 
+0

是的,我试过了。如果我理解正确,如果我尝试这样做:$ translatePartialLoader.addPart('home'); $ translate.refresh(); var homeTranslation; (translation){ homeTranslation = translation; console.log(homeTranslation); }); homeTranslation应该具有在en.json中定义的所有值,但它是未定义的。它永远不会进入。然后 – Bukic

+0

您的应用程序是否收到翻译文件?检查调试器的网络tav –

+0

在调用此服务之前,我可以在网络选项卡中看到en.json文件。也正如我之前写道,在路线中使用解析方法进行加载并在视图中使用它的效果很好。 – Bukic