Улучшить эту документацию Просмотреть исходный код $interpolate
- $interpolateProvider
- сервис в модуле ng
Обзор
Компилирует строку с разметкой в функцию интерполяции. Этот сервис используется сервисом HTML $compile для привязки данных. Смотрите $interpolateProvider для настройки разметки интерполяции.
var $interpolate = ...; // injected
var exp = $interpolate('Hello {{name | uppercase}}!');
expect(exp({name:'AngularJS'})).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 = '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–2018 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://code.angularjs.org/1.6.9/docs/api/ng/service/$interpolate