angularjs - как оценить значение с помощью внутреннего $ интерполированного выражения

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
    Как насчет плунжера? и мы посмотрим, сможем ли мы это исправить для вас.
  • 0
    Не помещайте $scope в выражение Angular {{policy.minLength}} .
Показать ещё 1 комментарий
Теги:
angularjs-directive
angularjs-interpolate

2 ответа

0
Лучший ответ

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

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

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

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

  • 0
    Я не уверен, что понимаю. В момент, когда я обрабатываю <local>, я могу подобрать <key> и <val> и их текстовое содержимое. Но если я оцениваю {{$ scope.policy.minLength}}, то (используя $ interpolate) он пуст (""). Я не уверен, как поможет включение. Я также попытался просто поместить текстовое содержимое в значение (поэтому у меня была строка «Минимальная длина - {{$ scope.policy.minLength} символов»), но, конечно, она сама не переводится (мы уже в фазе ссылки.) Можете ли вы объяснить, как transclude может помочь здесь? (я понимаю, что он делает в целом).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню