2017-05-02 4 views
0

저는 AngularJS에서 새로 왔고 사용 방법을 이해하려고 노력하고 있습니다. 내 웹 사이트를 번역 할 때 angular-translate를 사용하고 있지만 작동하지만 데이터베이스의 동적 컨텐츠에 문제가 있습니다.Angular-translate : 언어를 변경할 때 콘텐츠 (API 요청)를 새로 고치는 방법은 무엇입니까?

API 요청을 통해 동적 콘텐츠를 가져옵니다. 좋은 언어로 요청을 "다시 실행"하여 좋은 언어로 내용을 다시 불러오고 싶습니다.

"translateChangeSuccess"이벤트를 catch하지만 어떻게 이전 API 요청을 "다시 수행"할 수 있습니까? 내 영어

편집 죄송 :

당신에게 PS : 당신의 도움을 주셔서 대단히 감사합니다 translateChangeSuccess 이벤트에

// my run block : 

(function() 
{ 
    'use strict'; 

    angular 
     .module('fuse') 
     .run(runBlock); 


    function runBlock($rootScope, $timeout, $state, $cookieStore) 
    { 

     $rootScope.$on('$translateChangeSuccess', function() { 

      // catch translateChangeSuccess event 
      // redo the previous api request 

     }); 

    } 

})(); 

// my change language function 

     /** 
     * Change Language 
     */ 
     function changeLanguage(lang) 
     { 
      angular.forEach(vm.languages, function(value, key) { 

       if (lang.code == key) 
        $translate.use(lang.code); // launch translateChangeSuccess event 
      }); 
     } 

// my api service 

function apiService($http, $resource, $translate, CONFIG_API) 
    { 
     // change header with good language 
     $http.defaults.headers.common["Accept-Language"] = $translate.proposedLanguage(); 

     var api = {}; 

     // Base Url 
     api.baseUrl = CONFIG_API.base_url; 

     // request to reload when user changes language 
     api.Documents = $resource(api.baseUrl + 'documents/:id', 
      {id: '@id'}, 
      {update: {method: 'PUT'}} 
     ); 
     ... 
    } 

답변

0

좋아, 그렇게하는 방법을 찾았습니다. 난 그냥 서비스 (apiResolver)

test.module.js를 통해 다시 API로 데이터를 물어

(function() 
{ 
    'use strict'; 

    angular 
     .module('app.test_module', []) 
     .config(config); 

    /** @ngInject */ 
    function config($stateProvider, msApiProvider) 
    { 
     // State 
     $stateProvider.state('app.test_module', { 
      url  : '/myurl', 
      views : { 
       '[email protected]': { 
        templateUrl: 'mytemplate.html', 
        controller : 'MyController as vm' 
       } 
      }, 
      resolve : { 
       test : function (apiResolver) 
       { 
        return apiResolver.resolve('[email protected]'); 
       } 
      } 
     }); 

    } 

})(); 

및 test.controller.js :

(function() 
{ 
    'use strict'; 

    angular 
     .module('app.test_module') 
     .controller('testController', testController); 

    /** @ngInject */ 
    function testController($rootScope, apiResolver, dataToDisplay) 
    { 
     var vm = this; 

     // Data 
     vm.dataToDisplay = dataToDisplay; 

     $rootScope.$on('$translateChangeSuccess', function() { 
      // reload my content 
      apiResolver.resolve('[email protected]') 
      .then(function(result) { 
       vm.dataToDisplay = result; 
      }); 
     }); 
     } 

     // more code here but not usefull in this example 
})(); 

더 나은 방법이 있지만 작동하지만 사용자가 언어를 변경하면 데이터가 번역됩니다 :)

0

원하는 언어에 대한 현재 매개 변수 (다시 요청을 할 서버가 언어에 따라 다른 콘텐츠를 전송 함을 의미)

관리 방법이 다양하므로 솔리드 인스턴스를 제공 할 수 없습니다.

일부 코드를 사용하면 더 나은 설명을 얻을 수 있습니다.

+0

답변 해 주셔서 감사합니다. 내 코드의 주요 부분으로 내 게시물을 편집했습니다. "방법"을 알고 있지만 TranslateChangeSuccess 이벤트에있을 때 API 요청을 "다시 실행"하는 예제를 찾지 못했습니다. –

+0

정말 어떻게해야할지 모르기 때문에 몇 가지 예를 제공해 줄 수 있습니까? 내 컨트롤러에서 할 생각,하지만 같은 문제, 어떻게 모듈에 정의 된 쿼리를 다시 보내려면 :( –