1

!!!!!!!!!!古い質問

code旧式の)をご覧ください。テンプレート付きの分離ディレクティブは機能しますが、ビュー内でアクセスするディレクティブはありません。ビューにアクセスできない隔離された隔離指令コントローラモデル


新しいもの

私は同じplunkを使用して、私は、しかし、それはまだ動作していない私のディレクティブでtransclutionを使用する@Andrewアイゼンバーグ提案に耳を傾けてきました。

HTML

<p isolate-with-template></p> 
<p isolate-with-transclude>Hello World {{vm.hi}}</p> 

JS

angular.module('app',[]) 
.directive('isolateWithTemplate',function() { 
    return { 
    restrict: 'A', 
    controllerAs: 'vm', 
    scope:{}, 
    controller: function ($scope) { 
     var vm = this; 
     vm.hi = "hi"; 
    }, 
    template: "{{vm.hi}}" 
    } 
}) 
.directive('isolateWithTransclude',function() { 
    return { 
    restrict: 'A', 
    controllerAs: 'vm', 
    scope: {}, 
    transclude: true, 
    template: "<div ng-transclude></div>", 
    controller: function ($scope) { 
     var vm = this; 
     vm.hi = "hi"; 
    } 
    } 
}) 
+0

隔離されたscopeディレクティブは、テンプレート – charlietfl

答えて

0

isolateWithoutTemplate

+0

を 'scope:true'で指定すると、スコープはもはや切り離されません。プロトタイプ的には、親スコープから継承します。 –

2

に問題はあなたがトランスクルードされていないディレクティブの内側にコンテンツを追加したときということですscope: true,scope: {},を置き換えます、その内容ディレクティブによって上書きされます。

テンプレートを使用しないディレクティブの場合、そのすべてのコンテンツは単に削除されます。 {{vm.hi}}を任意のテキストに置き換えても、それが表示されないことがわかります。

ビューにvmを含める場合は、transcludeプロパティをディレクティブ定義に追加して、それをクロージャーする必要があります。また、テンプレートを追加する必要がありますが、空の場合もあります。 how to use transclude is available in the angular docsに関するさらに詳しい情報

+0

これは正しいです。これに加えて、ディレクティブタグ*の中に置かれた子要素は、ディレクティブ*の一部ではありません。 – Claies

+0

これは当てはまりません。こんにちは世界のテキストを表示するための例を更新し、それは正しく表示されます –

+0

うーん....あなたは正しいです。私は最初の(削除された)答えに戻り、 'vm'が子要素の範囲にないことと関係があると言うでしょう。 –

関連する問題