Улучшить эту документацию Просмотреть исходный код $interpolate
- $interpolateProvider
- сервис в модуле 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.
В целях безопасности настоятельно рекомендуется, чтобы веб-серверы экранировали данные, введенные пользователем, заменяя угловые скобки (<, >) на < и > соответственно, а все начальные/конечные маркеры интерполяции на их экранированные аналоги.
Экранированные маркеры интерполяции заменяются фактическими маркерами интерполяции в выходных данных только при обработке текста службой $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 для получения дополнительной информации.
Зависимости
Использование
$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–2020 Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
https://code.angularjs.org/1.8.2/docs/api/ng/service/$interpolate