Spec-Zone.ru › Angular.js 1.6

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

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

Для обеспечения безопасности настоятельно рекомендуется, чтобы веб-серверы экранировали данные, предоставленные пользователем, заменяя угловые скобки (<, >) соответственно на &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.6.9/docs/api/ng/service/$interpolate

Spec-Zone.ru

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