Spec-Zone.ru › Angular.js 1.5

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

  1. $interpolateProvider
  2. сервис в модуле 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.

В целях безопасности настоятельно рекомендуется, чтобы веб-серверы экранировали данные, введенные пользователем, заменяя угловые скобки (<, >) на &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–2017 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://code.angularjs.org/1.5.11/docs/api/ng/service/$interpolate

Spec-Zone.ru

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