Spec-Zone.ru › Angular.js 1.7

Улучшить эту документацию Просмотреть исходный код $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–2018 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://code.angularjs.org/1.7.8/docs/api/ng/service/$interpolate

Spec-Zone.ru

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