2016-01-11 4 views
0

Я ищу предложение о том, как сделать следующее:

У меня есть сервис «перевод», чтобы преобразовать ключи в строку (для локализации). Директива «local» называет это. Это выглядит следующим образом:

<local>key</local> 

Это смотрит вверх «ключ» в данном переводе и возвращает его значение, а затем заменяет себя значение. поэтому, возможно, ключ «имя пользователя» возвращает значение «Имя пользователя» для включения в страницу.

Проблема: Я хочу поддерживать строки со значениями, например. ключ «minLength» имеет строковое значение «Минимальная длина - {0} символов». Я хотел бы что-то вроде следующего:

<local> 
    <key>minLength</key> 
    <val>{{policy.minLength}}</val> 
</local> 

Я ударил вопрос, когда значение $ scope.policy еще не были установлены время <local> тег оценивается (в фазе связи).

Я предполагаю, что, поскольку я заменяю «местный» тег на значение, фактический тег не будет придерживаться, чтобы быть оцененным снова, когда $ scope.policy.minLength фактически имеет значение.

Может ли кто-нибудь дать мне представление, как это сделать? Я искал материал на интерполяторе $, но я думаю, что тэг <local> заменяет: true убивает меня здесь. Любые идеи, как обойти это?

+1

Как насчет плункера? и мы увидим, можем ли мы исправить это для вас. – Chanthu

+0

Не помещайте '$ scope' в выражение Угловое выражение' {{policy.minLength}} '. – georgeawg

+0

Doh! Удалено использование $ scope, как было предложено. И я посмотрю, что я могу придумать для плункера. Благодаря! –

ответ

0

Я понял, как это сделать. Используя приведенный выше пример:

  • Получите текстовое содержимое ключа и любые теги <val>.
  • Позвоните в службу перевода, чтобы получить строку формата (для ключа) с добавленным к ней содержимым <val>. Это значение будет «Минимальная длина - {{policy.minLength}} символы».
  • Создать часы $. Часть 'current value function' создает значение $ interpolate() для значения выше, а затем оценивает его в контексте текущей области.
  • Замените оригинальный <local> тег <span> (т.е. эквивалент «заменить: правда»)
  • Всякий раз, когда изменяется значение $ часов, просто замените TextContent в <span> с новым значением.
0

Вы должны установить свою директиву в , перевести, а также использовать встроенную директиву для управления оценкой внутреннего оператора.

Смотрите, если это помогает: https://docs.angularjs.org/api/ng/directive/ngTransclude

+0

Я не уверен, что понимаю. В тот момент, когда я обрабатываю , я могу подобрать и и их текстовое содержимое. Но если я оцениваю {{$ scope.policy.minLength}}, то (используя $ интерполяцию), он пуст (""). Я не уверен, как поможет трансклюзия. Я также попытался просто поместить текстовое содержимое в значение (поэтому у меня была «Минимальная длина: {{$ scope.policy.minLength} в качестве строки, но, конечно, сам по себе не переводится (мы уже находимся в фазе ссылок). Можете ли вы объяснить, как здесь может помочь transclude (я понимаю, что он делает в целом). –