2013-05-20 13 views
37

基本的にはイベントをトリガしてから、ディレクティブをコンパイルしてDOMの位置に挿入することができます。 現在... 任意の手掛かりを私は私が必要とするすべてでオブジェクト「エル」を見ることができています。このプログラムでディレクティブを挿入する

//controller 
    angular.module('app').controller('MainCtrl', function ($scope, $compile) { 

    $scope.$on('insertItem',function(ev,attrs){ 
     var el = $compile("<chart></chart>")($scope); 
     $scope.insertHere = el; 
    }); 

    }); 


// directive 
angular.module('app') 
    .directive('chart', function() { 
    return { 
     template: '<div>My chart</div>', 
     restrict: 'E', 
     link: function postLink(scope, element, attrs) { 
     element.text('this is a chart'); 
     } 
    }; 
    }); 

のようなものを持っているが、私はDOMに挿入することはできませんよ?

+0

[動的AngularJSにディレクティブを追加]の可能複製(http://stackoverflow.com/questions/15279244/dynamically-add -directive-in-angularjs) –

答えて

46

dom要素を最初に作成し、コンパイルしてドキュメントに追加する必要があります。このような何か:私はここに簡単な例を作成しました

$scope.$on('insertItem',function(ev,attrs){ 
    var chart = angular.element(document.createElement('chart')); 
    var el = $compile(chart)($scope); 

    //where do you want to place the new element? 
    angular.element(document.body).append(chart); 

    $scope.insertHere = el; 
}; 

http://plnkr.co/edit/n7SZpyeQ9nbjVSYA7ibB?p=preview

+4

Angular以外の要素を作成する場合、 '$ compile'にはどのようにアクセスしますか? – Hengjie

+0

こんにちは、プログラムで簡単にディレクティブを追加するために、私の提案する新しいAPIに関するアイデアをお寄せください。 https://github.com/angular/angular.js/issues/6950ありがとう! – trusktr

+1

@Hengjie特定のスコープ(角の内側)を参照して要素をコンパイルする必要があります。角度の外に指示はありません。ディレクティブはアプリ内のスコープに関連付けられています。代わりに、角度とイベントハンドラの内部でjQLiteを使用することもできます( 'angular.element( 'body')')。 –

関連する問題