我想在我的控制器中使用$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> '
+ '<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> '
+ '<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> '
+ '<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> '
+ '<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
。
要看看我的代碼是如何工作的,這是頁面的狀態,當我加載它:
前一頁是法語,然後當我將其更改爲英語:
,你可以看到所有的標籤得到翻譯成英文,除了Afficher
,Modifier
和Supprimer
這是我在controlle翻譯r,並且您可以注意到控制檯中存在日誌,這意味着$translateChangeSuccess
已經工作,但無法更改視圖中的值。
您使用的角翻譯?如果是,請查看$ translate服務。 https://angular-translate.github.io/docs/#/guide/03_using-translate-service – sdfacre
@sdfacre是的我已經閱讀過那篇文章,我的問題不是關於如何使用$ translate,因爲我說它可以工作,但是我必須刷新我的案例中的網頁才能看到效果。 –