2017-01-23 7 views
2

角1.4.8ディレクティブ要素をプログラムで作成するにはどうすればよいですか?

コントローラー内でプログラムでディレクティブエレメントを作成するにはどうすればよいですか?私は$compileを試しましたが、それは私のためには機能しません。

コントローラとディレクティブ

angular.module('plunker', []) 
.controller('MainCtrl', function ($scope, $compile) { 
    var container = angular.element(document.getElementById('container')); 
    $scope.user = {item: 'Axe'}; 

    var item = angular.element(document.createElement('anItem')); 
    item = $compile(item)($scope); 

    container.append(item); 
}) 
.directive('anItem', function(){ 
    return { 
    templateUrl: 'template.html' 
    }; 
}); 

template.html

<p>Item: {{user.item}}</p> 

index.htmlを

... 
<body ng-controller="MainCtrl"> 
    <div id="container"></div> 
</body> 
... 

彼私のプランカです:http://plnkr.co/edit/XY6C6J70PjQTrjiwjHSz?p=preview

+0

あなたのhtmlでng-ifを使用することはできませんか?あなたのコントローラーにフラグを設定してレンダリングするかどうかを決めます。 –

+1

それはちょうどケーシングの問題です: 'anItem'の代わりに' document.createElement( 'an-item') ' – lex82

+0

@ lex82あなたは正しいです、ありがとう!あなたの答えを掲示し、私はそれを評価します。 – trex

答えて

2

ディレクティブの名前は "anItem"ですが、DOM要素の名前は "an-item"です。これは角のある命名規則です。これは動作します:

document.createElement('an-item') 

ここでは、更新されたPlunkerです。

0
var elm = angular.element('<an-item"></an-item>'); 
container.append(elm); 

scope.$applyAsync(function() { 
    $compile(elm)(scope); 
}); 
関連する問題