如何使用指令定义的“替换”?


81

在此文档中: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不起作用。我想念什么吗?

现场演示:http//plnkr.co/edit/rGIgmjO81X2UxJohL4HM?p = preview

Answers:


174

您会与混淆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标签确实已被替换


关于超越:“元素”。在使用ng-transclude时,它似乎和replace:'true'一样。
CMCDragonkai 2014年

是replace:false,和完全不使用replace一样吗?
尼尔2014年

1
@尼尔是的。将其保留下来与false
checketts 2014年

10
replace现在已弃用
罗伯特·罗伯特(Robert)2007年

2
@Robert“替换”是否会有替代品,或者它永远消失了?
cirovladimir 2015年

12

如文档所述,“替换”确定当前元素是否被指令替换。另一个选择是基本上是否只是将其添加为子级。如果查看plnkr的源代码,请注意,对于第二个指令(其中replace为false),div标签仍然存在。对于第一个指令则不是。

第一个结果:

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

第二个结果:

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

5

替换[真| False(默认)

影响

1.  Replace the directive element. 

依赖关系:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.