2017-01-23 3 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> 
... 

Он re - мой плукер: http://plnkr.co/edit/XY6C6J70PjQTrjiwjHSz?p=preview

+0

Вы не можете использовать ng-if в своем html? и установить флаг в вашем контроллере, на котором выполняется рендеринг или нет? –

+1

Это просто проблема с корпусом: 'document.createElement ('an-item')' вместо 'anItem' – 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); 
});