这个问题在这里已有答案:
为什么 replace=true
或 replace=false
对下面的代码没有任何影响?
当replace = false时,为什么不显示“某些现有内容”?
或者更谦虚地说,你能否解释一下指令中的 replace=true/false
功能以及如何使用它?
Example
JS /角:
<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中看到它:
2 回答
当你有
replace: true
时,你得到以下DOM:而
replace: false
,你得到这个:因此,指令中的
replace
属性引用指令所应用的元素(在这种情况下为<my-dir>
)应该保留(replace: false
),指令的模板应该是 appended 作为其子节点,要么
指令所应用的元素应该是指令模板的 replaced (
replace: true
) .在这两种情况下,元素(应用指令)的子元素都将丢失 . 如果你想坚持元素的原始内容/孩子,你必须转换它 . 以下指令将执行此操作:
在这种情况下,如果在指令的模板中有一个具有属性
ng-transclude
的元素(或元素),则其 content 将被元素(应用指令)原始内容替换 .参见translusion的例子http://plnkr.co/edit/2DJQydBjgwj9vExLn3Ik?p=preview
请参阅this以阅读有关translusion的更多信息 .
replace:true已弃用
来自Docs:
来自GitHub: