ディレクティブ定義の `replace`を使用するにはどうすればよいですか?


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

回答:


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をまったく使用しないのと同じですか?
ニール

1
@ニールはい。オフのままにするのは同じですfalse
checketts 2014年

10
replace現在非推奨です
ロバート

2
@Robertは「replace」に置き換えがありますか、それとも永久になくなりますか?
cirovladimir 2015年

12

ドキュメントに記載されているように、「replace」は、現在の要素をディレクティブで置き換えるかどうかを決定します。もう1つのオプションは、基本的に子として追加するかどうかです。plnkrのソースを見ると、replaceがfalseである2番目のディレクティブでは、divタグがまだ存在していることに注意してください。最初のディレクティブではそうではありません。

最初の結果:

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

2番目の結果:

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

5

[True | False(デフォルト)]

効果

1.  Replace the directive element. 

依存:

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

0

また、実際のルート要素の中でテンプレートのトップレベルにコメントがある場合、このエラーが発生しました。

<!-- Just a commented out stuff -->
<div>test of {{value}}</div>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.