Подтвердить что ты не робот

Как использовать `replace` определения директивы?

В этом документе: http://docs.angularjs.org/guide/directive, он говорит, что для директив есть конфигурация replace:

template - заменить текущий элемент содержимым HTML. Процесс замещения переносит все атрибуты/классы из старого элемента в новый. Дополнительную информацию см. В разделе "Создание компонентов" ниже.

код javascript

app.directive('myd1', function(){
  return {
    template: '<span>directive template1</span>',
    replace: true
  }
});

app.directive('myd2', function(){
  return {
    template: '<span>directive template2</span>',
    replace: false
  }
});

html-код

<div myd1>
  original content should be replaced
</div>
<div myd2>
  original content should NOT be replaced
</div>

Но последняя страница выглядит следующим образом:

directive template1
directive template2

Кажется, что replace не работает. Мне что-то не хватает?

Live demo: http://plnkr.co/edit/rGIgmjO81X2UxJohL4HM?p=preview

4b9b3361

Ответ 1

Вы путаетесь с transclude: true, который добавит внутренний контент.

replace: true означает, что содержимое шаблона директивы заменит элемент, объявленный директивой, в этом случае тег <div myd1>.

http://plnkr.co/edit/k9qSx15fhSZRMwgAIMP4?p=preview

Например без replace:true

<div myd1><span class="replaced" myd1="">directive template1</span></div>

и с replace:true

<span class="replaced" myd1="">directive template1</span>

Как вы можете видеть в последнем примере, тег div действительно заменен.

Ответ 2

Как указано в документации, "replace" определяет, заменяется ли текущий элемент директивой. Другой вариант заключается в том, что он просто добавлен в качестве ребенка в основном. Если вы посмотрите на источник своего plnkr, обратите внимание, что для второй директивы, где replace является false, тег div все еще существует. Для первой директивы это не так.

Первый результат:

<span myd1="">directive template1</span>

Второй результат:

<div myd2=""><span>directive template2</span></div>

Ответ 3

Заменить [True | False (по умолчанию)]

Эффект

1.  Replace the directive element. 

Зависимость:

1. When replace: true, the template or templateUrl must be required. 

Ответ 4

Также я получил эту ошибку, если у меня был комментарий в верхнем уровне шаблона tn среди фактического корневого элемента.

<!-- Just a commented out stuff -->
<div>test of {{value}}</div>