Улучшить эту документацию Просмотреть исходный код $interpolate
- $interpolateProvider
- сервис в модуле ng
Компилирует строку с разметкой в функцию интерполяции. Этот сервис используется сервисом HTML $compile для привязки данных. Смотрите $interpolateProvider для настройки разметки интерполяции.
var $interpolate = ...; // injected
var exp = $interpolate('Hello {{name | uppercase}}!');
expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!');
$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 = 'Angular';
expect(exp(context)).toEqual('Hello Angular!');
allOrNothing полезна для интерполяции URL-адресов. ngSrc и ngSrcset используют это поведение.
Экранированная интерполяция
$interpolate предоставляет механизм для экранирования маркеров интерполяции. Стартовые и конечные маркеры можно экранировать, предваряя каждый их символ обратной косой чертой U+005C (обратный слэш). Она будет отображаться как обычный стартовый/конечный маркер и не будет интерпретироваться как выражение или привязка.
Это позволяет веб-серверам в некоторой степени предотвращать атаки со скриптовым инъекциями и атаки на подмену, а также позволяет использовать примеры кода, не полагаясь на директиву ngNonBindable.
Для обеспечения безопасности настоятельно рекомендуется, чтобы веб-серверы экранировали данные, предоставляемые пользователем, заменяя угловые скобки (<, >) на < и > соответственно, а все маркеры начала/конца интерполяции — на их экранированные аналоги.
Экранированные маркеры интерполяции заменяются фактическими маркерами интерполяции только в выходных данных, когда сервис $interpolate обрабатывает текст. Таким образом, для HTML-элементов, интерполированных с помощью $compile, или интерполированных с параметром mustHaveExpression установленном в значение true, интерполированный текст должен содержать неэкранированное выражение интерполяции. Поэтому это обычно полезно только в случае, если данные пользователя используются для рендеринга шаблона с сервера или в случае использования недоверенных данных в директиве.
Зависимости
Использование
$interpolate(text, [mustHaveExpression], [trustedContext], [allOrNothing]);
Аргументы
| Параметр | Тип | Подробности |
|---|---|---|
| text | string | Текст с разметкой для интерполяции. |
| mustHaveExpression (необязательно) | boolean | Если установлено в true, то строка интерполяции должна содержать вложенное выражение, чтобы вернуть функцию интерполяции. Строки без вложенных выражений вернут null для функции интерполяции. |
| trustedContext (необязательно) | string | При указании возвращаемая функция пропускает интерполированный результат через $sce.getTrusted(interpolatedResult, trustedContext) перед возвратом. Подробнее см. сервис $sce, который обеспечивает строгую контекстуальную экранировку. |
| allOrNothing (необязательно) | boolean | Если |
Возвращаемое значение
function(context) |
функция интерполяции, используемая для вычисления интерполированной строки. Функция имеет следующие параметры:
|
Методы
-
startSymbol();
Символ, обозначающий начало выражения в интерполированной строке. По умолчанию
{{.Изменить символ можно с помощью
$interpolateProvider.startSymbol.Возвращаемое значение
stringсимвол начала.
-
endSymbol();
Символ, обозначающий конец выражения в интерполированной строке. По умолчанию
}}.Изменить символ можно с помощью
$interpolateProvider.endSymbol.Возвращаемое значение
stringсимвол конца.
© 2010–2017 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://code.angularjs.org/1.3.20/docs/api/ng/service/$interpolate