Spec-Zone.ru › Angular.js 1.8

Улучшить эту документацию Просмотреть исходный код $interpolate

  1. $interpolateProvider
  2. сервис в модуле ng

Обзор

Компилирует строку с разметкой в функцию интерполяции. Этот сервис используется службой HTML $compile для привязки данных. Смотрите $interpolateProvider для настройки разметки интерполяции.

var $interpolate = ...; // injected
var exp = $interpolate('Hello {{name | uppercase}}!');
expect(exp({name:'AngularJS'})).toEqual('Hello ANGULARJS!');

$interpolate принимает необязательный четвертый аргумент, allOrNothing. Если allOrNothing является true, функция интерполяции вернёт undefined, если все встроенные выражения не имеют значения, отличного от undefined.

var $interpolate = ...; // injected
var context = {greeting: 'Hello', name: undefined };

// default "forgiving" mode
var exp = $interpolate('{{greeting}} {{name}}!');
expect(exp(context)).toEqual('Hello !');

// "allOrNothing" mode
exp = $interpolate('{{greeting}} {{name}}!', false, null, true);
expect(exp(context)).toBeUndefined();
context.name = 'AngularJS';
expect(exp(context)).toEqual('Hello AngularJS!');

allOrNothing полезна для интерполяции URL-адресов. ngSrc и ngSrcset используют это поведение.

Экранированная интерполяция

$interpolate предоставляет механизм для экранирования маркеров интерполяции. Начальный и конечный маркеры можно экранировать, предваряя каждый из их символов обратной косой чертой U+005C (обратный слэш). Он будет отображаться как обычный начальный/конечный маркер и не будет интерпретироваться как выражение или привязка.

Это позволяет веб-серверам в некоторой степени предотвращать атаки с внедрением скриптов и подмены, а также позволяет примерам кода работать без использования директивы ngNonBindable.

В целях безопасности настоятельно рекомендуется, чтобы веб-серверы экранировали данные, введенные пользователем, заменяя угловые скобки (<, >) на &lt; и &gt; соответственно, а все начальные/конечные маркеры интерполяции на их экранированные аналоги.

Экранированные маркеры интерполяции заменяются фактическими маркерами интерполяции в выходных данных только при обработке текста службой $interpolate. Таким образом, для HTML-элементов, интерполированных службой $compile, или интерполированных другим способом с параметром mustHaveExpression установленным в значение true, интерполированный текст должен содержать неэкранированное выражение интерполяции. Таким образом, это обычно полезно только при использовании данных пользователя для рендеринга шаблона с сервера или при использовании других небезопасных данных в директиве.

Известные проблемы

В настоящее время невозможно, чтобы выражение интерполяции содержало конечный символ интерполяции. Например, {{ '}}' }} будет неправильно интерпретироваться как {{ ' }} + ' }}, т.е. как выражение интерполяции, состоящее из одиночной кавычки (') и строки ' }}.

Все директивы и компоненты должны использовать стандартные {{ }} символы интерполяции в своих шаблонах. Если вы измените символы интерполяции приложения, служба $compile попытается денормализовать стандартные символы до пользовательских символов. Процесс денормализации недостаточно умен, чтобы не заменять стандартные символы, где они не будут обрабатываться как символы интерполяции. Например, в следующем фрагменте кода закрывающие фигурные скобки литерального объекта будут неправильно денормализованы:

<div data-context='{"context":{"id":3,"type":"page"}}">

Решение заключается в том, чтобы гарантировать, что такие случаи разделяются пробелами:

<div data-context='{"context":{"id":3,"type":"page"} }">

См. https://github.com/angular/angular.js/pull/14610#issuecomment-219401099 для получения дополнительной информации.

Зависимости

  • $parse
  • $sce

Использование

$interpolate(text, [mustHaveExpression], [trustedContext], [allOrNothing]);

Аргументы

Параметр Тип Подробности
text string

Текст с разметкой для интерполяции.

mustHaveExpression
(необязательно)
boolean

Если установлено в значение true, то строка интерполяции должна иметь встроенное выражение, чтобы вернуть функцию интерполяции. Строки без встроенного выражения вернут null для функции интерполяции.

trustedContext
(необязательно)
string

Если указано, возвращаемая функция передаёт интерполированный результат через $sce.getTrusted(interpolatedResult, trustedContext) перед возвратом. Обратитесь к службе $sce, которая предоставляет строгую контекстную экранизацию, для получения подробностей.

allOrNothing
(необязательно)
boolean

Если true, то возвращаемая функция возвращает undefined, если все встроенные выражения не имеют значения, отличного от undefined.

Возвращаемое значение

function(context)

функция интерполяции, которая используется для вычисления интерполированной строки. Функция имеет следующие параметры:

  • context: контекст выполнения для всех выражений, встроенных в интерполированный текст

Методы

  • startSymbol();

    Символ, обозначающий начало выражения в интерполированной строке. По умолчанию {{.

    Используйте $interpolateProvider.startSymbol для изменения символа.

    Возвращаемое значение

    string

    начальный символ.

  • endSymbol();

    Символ, обозначающий конец выражения в интерполированной строке. По умолчанию }}.

    Используйте $interpolateProvider.endSymbol для изменения символа.

    Возвращаемое значение

    string

    конечный символ.

© 2010–2020 Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
https://code.angularjs.org/1.8.2/docs/api/ng/service/$interpolate

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API