2016-04-01 47 views
0

我想在我的控制器中使用$translate,並且當我更改語言時,所有字符串都會被翻譯,當我使用{{'Menu.CANDIDATURES.VIEW' | translate}}時,這種方法可行,但我也想在控制器上使用它。

爲了這個,我用$watch如下:

.controller('CandidaturesDatatableCtrl', function ($scope, DTOptionsBuilder, DTColumnBuilder, $filter) { 

    $scope.view = ''; 
    $scope.update = ''; 
    $scope.delete = ''; 

    $scope.$watch(
     function() { return $filter('translate')('ACTIONS.VIEW'); }, 
     function(newval) { $scope.view = newval; console.log(newval); } 
    ); 

    $scope.$watch(
     function() { return $filter('translate')('ACTIONS.UPDATE'); }, 
     function(newval) { $scope.update = newval } 
    ); 

    $scope.$watch(
     function() { return $filter('translate')('ACTIONS.DELETE'); }, 
     function(newval) { $scope.delete = newval } 
    ); 

    // deleted code 
     .renderWith(function(data, type, full, meta) { 
      if (true) { 
      return '<button class="btn btn-blue btn-primary btn-ef btn-ef-5 btn-ef-5b mb-10"><i class="fa fa-trash"></i> <span>'+$scope.view+'</span></button>&nbsp;' 
       + '<button class="btn btn-bl btn-success btn-ef btn-ef-5 btn-ef-5b mb-10"><i class="fa fa-trash"></i> <span>'+$scope.update+'</span></button>&nbsp;' 
       + '<button class="btn btn-danger btn-rounded btn-ef btn-ef-5 btn-ef-5b mb-10"><i class="fa fa-trash"></i> <span>'+$scope.delete+'</span></button>'; 
      } else { 
      return ''; 
      } 

     }) 
    ]; 
    }); 

$watch工作正常,你可以在我的代碼,看到有一個console.log(newval)它記錄了新的翻譯,但$ scope.view,$ scope.update和$ scopte.delete在我更改語言後沒有被翻譯,所以我需要刷新我的頁面才能看到新的翻譯。

我該如何解決這個問題?

正如你所看到的,我寫的代碼非常難看,如果你知道其他方式,我將不勝感激。

編輯:

我嘗試如下,而不是使用$watch$translateChangeSuccess事件:

.controller('CandidaturesDatatableCtrl', function ($scope, DTOptionsBuilder, DTColumnBuilder, $filter, $rootScope, $translate) { 

    $scope.view = $filter('translate')('ACTIONS.VIEW'); 
    $scope.update = $filter('translate')('ACTIONS.UPDATE'); 
    $scope.delete = $filter('translate')('ACTIONS.DELETE'); 

    $rootScope.$on('$translateChangeSuccess', function() { 
     $translate(['ACTIONS.VIEW','ACTIONS.UPDATE','ACTIONS.DELETE']).then(function (newval) { 
     console.log(newval); 
     $scope.view = newval['ACTIONS.VIEW']; 
     $scope.update = newval['ACTIONS.UPDATE']; 
     $scope.delete = newval['ACTIONS.DELETE']; 
     }); 
    }); 
//... 
     DTColumnBuilder.newColumn(null).withTitle('Actions').notSortable() 
     .renderWith(function(data, type, full, meta) { 
      if (true) { 
      return '<button class="btn btn-blue btn-primary btn-ef btn-ef-5 btn-ef-5b mb-10"><i class="fa fa-trash"></i> <span>'+$scope.view+'</span></button>&nbsp;' 
       + '<button class="btn btn-bl btn-success btn-ef btn-ef-5 btn-ef-5b mb-10"><i class="fa fa-trash"></i> <span>'+$scope.update+'</span></button>&nbsp;' 
       + '<button class="btn btn-danger btn-rounded btn-ef btn-ef-5 btn-ef-5b mb-10"><i class="fa fa-trash"></i> <span>'+$scope.delete+'</span></button>'; 
      } else { 
      return ''; 
      } 

     }) 
    ]; 
    }); 

但它沒有工作,我得到了相同的行爲,當我使用$watch

要看看我的代碼是如何工作的,這是頁面的狀態,當我加載它:

enter image description here

前一頁是法語,然後當我將其更改爲英語:

enter image description here

,你可以看到所有的標籤得到翻譯成英文,除了AfficherModifierSupprimer這是我在controlle翻譯r,並且您可以注意到控制檯中存在日誌,這意味着$translateChangeSuccess已經工作,但無法更改視圖中的值。

+1

您使用的角翻譯?如果是,請查看$ translate服務。 https://angular-translate.github.io/docs/#/guide/03_using-translate-service – sdfacre

+0

@sdfacre是的我已經閱讀過那篇文章,我的問題不是關於如何使用$ translate,因爲我說它可以工作,但是我必須刷新我的案例中的網頁才能看到效果。 –

回答

1

真的不喜歡看那些觀察家....實際上,你可以聽一些事件,即$ translateChangeSuccess

這裏是plunker:http://plnkr.co/edit/njVZQ2plsXK95JvuxP1J?p=preview

$rootScope.$on('$translateChangeSuccess', function(){ 
    $translate(['ACTIONS.VIEW', 'ACTIONS.UPDATE']).then(function (result) { 
    $scope.view = result['ACTIONS.VIEW']; 
    $scope.update= result['ACTIONS.UPDATE']; 
    }); 
}); 
+0

感謝您的幫助,但我不敢說它不起作用,請檢查我的最新編輯以獲取更多詳細信息。 –

+0

對不起,只是意識到按鈕實際上是使用字符串呈現的。你爲什麼這麼做?是不是有一種有角度的做法?如果無法更改按鈕,可能嘗試將按鈕配置移動到$ translate解析器中,以便在語言更改後重新呈現按鈕。 – sdfacre

+0

我使用angular-datatables哪個和唯一的方法添加一列到它的HTML代碼是呈現該HTML,抱歉,但我不知道如何將該HTML代碼移動到$ translate resolver –

相關問題