angular translate - передача области интерполяции

При использовании Angular-Translate вы можете передать карту, которая будет использоваться для интерполяции.

Синтаксис может быть, например,

{{ 'KEY_TO_TRANSLATE' | translate:interpulationValues }}

Проблема в том, что для этого требуется, чтобы я собирал переменные, которые я хочу передать, на специальном объекте.

Я хотел знать, есть ли способ передать всю текущую область (+ унаследованную) в Translate, чтобы все, что находится в области, можно было использовать в интерполяции?

Благодарить


person epeleg    schedule 02.07.2014    source источник


Ответы (3)


Не уверен, что это хорошая идея, но вы должны сделать это следующим образом:

{{ 'KEY_TO_TRANSLATE' | translate:this}}

Вы также можете использовать директиву для создания объекта непосредственно в вашем представлении (параметру фильтра нужен объект на основе контроллера, если я хорошо помню):

<ANY translate="TRANSLATION_ID"
translate-values="{ username: someScopeObject.username }"></ANY>

см. http://angular-translate.github.io/docs/#/guide/06_variable-replacement

person Jscti    schedule 02.07.2014

Вы можете просто выполнить цикл $scope, используя обычный цикл javascript for. Все унаследованные свойства будут присутствовать.

Этот подход хорош тем, что позволяет выполнять некоторую проверку имен переменных (например, отфильтровывать переменные Angular, начинающиеся с $ или $$, а также отфильтровывать имена функций:

$scope.varList = {};
for (var key in $scope) {
    if (key !== 'varList' && 
        key.charAt(0) !== '$' && 
        key.charAt(1) !== '$' && 
        !angular.isFunction($scope[key])) {

        $scope.varList[key] = $scope[key];
    }
}
person b0nyb0y    schedule 02.07.2014

вы можете использовать запись через точку из любого объекта:

если у нас есть в нашей области следующий объект durationValues и мы передаем его в качестве аргумента для перевода, мы можем использовать любое из свойств или подсвойств контекста данных

{{max}} будет интерполировано из переданного в datacontext (т.е. durationValues )

   $scope.durationValues = {
            min: $scope.minDuration,
            **max**: $scope.maxDuration
        }

and we have a view fragment as in

{{ 'PLAN_DETAILS:MAXIMUM_REQUIRED' | translate:$scope.durationValues }}

куда

'PLAN_DETAILS:MAXIMUM_REQUIRED': 'The plan needs to be less than or equal to **{{max}}** weeks long.'

Я надеюсь, что это проясняет ситуацию

person Byron    schedule 12.02.2016