Почему replace=true
или replace=false
не оказывает никакого влияния в коде ниже?
Почему при replace = false не отображается «некоторый существующий контент»?
Или, говоря более скромно, не могли бы вы объяснить, что это за replace=true/false
функция в директивах и как ее использовать?
пример
JS / Angular:
<script>
angular.module('scopes', [])
.controller('Ctrl', function($scope) {
$scope.title = "hello";
})
.directive('myDir', function() {
return {
restrict: 'E',
replace: true,
template: '<div>{{title}}</div>'
};
});
</script>
HTML:
<div ng-controller="Ctrl">
<my-dir><h3>some existing content</h3></my-dir>
</div>
Смотрите в Plunker здесь:
angularjs
angularjs-directive
Кая Тост
источник
источник
Ответы:
Когда у вас есть,
replace: true
вы получите следующую часть DOM:<div ng-controller="Ctrl" class="ng-scope"> <div class="ng-binding">hello</div> </div>
тогда как
replace: false
вы получите это:<div ng-controller="Ctrl" class="ng-scope"> <my-dir> <div class="ng-binding">hello</div> </my-dir> </div>
Таким образом,
replace
свойство в директивах относится к тому, должен ли элемент, к которому применяется директива (<my-dir>
в этом случае), оставаться (replace: false
), а шаблон директивы должен быть добавлен как его дочерний элемент ,ИЛИ
элемент, к которому применяется директива, должен быть заменен (
replace: true
) шаблоном директивы.В обоих случаях дочерние элементы элемента (к которому применяется директива) будут потеряны. Если вы хотите сохранить исходное содержимое / дочерние элементы элемента, вам придется их транслютировать. Это сделает следующая директива:
.directive('myDir', function() { return { restrict: 'E', replace: false, transclude: true, template: '<div>{{title}}<div ng-transclude></div></div>' }; });
В том случае, если в шаблоне директивы у вас есть элемент (или элементы) с атрибутом
ng-transclude
, его содержимое будет заменено исходным содержимым элемента (к которому применяется директива).См. Пример перевода http://plnkr.co/edit/2DJQydBjgwj9vExLn3Ik?p=preview
См. Это, чтобы узнать больше о переводе.
источник
replace
устарел с AngularJS v1.3 ( ссылка ).replace:true
не рекомендуетсяИз Документов:
- API комплексной директивы AngularJS
Из GitHub:
- Проблема с AngularJS № 7636.
Обновить
Проблемы с replace: true
transclude: element
в корне шаблона замены может иметь неожиданные последствияДля получения дополнительной информации см.
replace:true
источник
remove-host
обходной путь stackoverflow.com/questions/34280475/… если вы узнаете об активацииreplace: true
в A2, дайте нам знать.