2016-07-01 6 views
2

角度1.5を導入multi-slot transclusiontransclude関数からtransclusionスロットにアクセスするにはどうすればよいですか?

transcludeオブジェクト:the docsによれば{slotA: '?myCustomElement'}はそうでない

残念なことに$のtransclude関数を介してアクセスすることができるslotAスロットに要素をマッピングしますこれの例を挙げてください。それが与える唯一の例では、すべてのスロットを言及していない:

$transclude(function(clone, scope) { 
    element.append(clone); 
    transcludedContent = clone; 
    transclusionScope = scope; 
}); 

誰かが$のtransclude機能を使用して、各スロットにアクセスする方法にいくつかの光を当てることができますか?

答えて

11

私は同様の問題がありましたが、ng-transcludeのソースコードを読むことは役に立ちます。 $ transclude関数の第3引数があります。これはスロット名です。

https://github.com/angular/angular.js/blob/master/src/ng/directive/ngTransclude.js#L190

簡単な例:

angular.module('app', []); 
 

 
angular 
 
    .module('app') 
 
    .directive('dir', function() { 
 
    return { 
 
     transclude: { 
 
     a: 'aT', 
 
     b: 'bT' 
 
     }, 
 
     link: function (scope, elem, attrs, ctrl, transclude) { 
 
     transclude(function (content) { 
 
      elem.append('<div>a</div>'); 
 
      elem.append(content); 
 
     }, null, 'a'); 
 
     
 
     transclude(function (content) { 
 
      elem.append('<div>b</div>'); 
 
      elem.append(content); 
 
     }, null, 'b'); 
 
     } 
 
    }; 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.js"></script> 
 

 
<div ng-app="app"> 
 
    <dir> 
 
    <a-t>content of a</a-t> 
 
    <b-t>content of b</b-t> 
 
    </dir> 
 
</div>

+1

あなたがnull'なので 'に渡している2番目のパラメータは何ですか? – adamdport

+0

範囲。必要に応じて、トランスクリプトのスコープをカスタムのスコープに変更することができます。 – sielakos

+5

これは100%正確ではありません。スコープは最初のオプション(ここでは未使用)パラメータで変更できます。 'null'は' futureParentElement'パラメータに適用されます。しかし、スロットパラメータは正しいです。完全な宣言は 'function([scope]、cloneLinkingFn、futureParentElement、slotName)'です(ソース:https://docs.angularjs.org/api/ng/service/$compile) –

関連する問題