2015-02-28 2 views
0

У меня есть директива, как это:Компиляция динамической директивы внутри шаблона

foldeskApp.directive('contributionFooter', function() { 
    return { 
     restrict: 'C', 
     template: '<button type="button" class="btn" ng-class="{\'btn-success\': canCreate()}">Add</button>' 
    }; 
}); 

и контроллер, как это:

foldeskApp.controller('MainCtrl', 
    ['Auth', '$scope', function(Auth, $scope) { 
    $scope.footerType = 'contribution'; 
}]); 

Могу ли я назвать директивы, как это?

<div class="modal-footer {{footerType}}-footer"></div> 
+0

Код кажется прекрасным для меня ... У вас возникли проблемы с запуском? –

+1

Я абсолютно уверен, что вы не можете. Угловой компилирует DOM, прежде чем он интерполирует выражения –

+0

@LinhPham Он просто не компилирует его вообще ... – ProGM

ответ

0

Вам необходимо скомпилировать DOM, используя службу компиляции $.

Вот пример того, как добиться того, что, хотя я не любитель, используя $ таймаут здесь:

http://codepen.io/jlowcs/pen/jEKKjZ

HTML:

<div ng-controller="MainCtrl"> 
    <div class="modal-footer {{footerType}}-footer"></div> 
</div> 

JS:

angular.module('exampleApp', []) 
.directive('contributionFooter', function() { 
    return { 
     restrict: 'C', 
     template: '<button type="button" class="btn" ng-class="{\'btn-success\': canCreate()}">Add</button>' 
    }; 
}) 
.controller('MainCtrl', function($scope, $element, $timeout, $compile) { 
    $scope.footerType = 'contribution'; 

    //timeout to do it when {{footerType}} has been replaced 
    //but it would probably be best to do this in a link function in a directive 
    $timeout(function() { 
     $compile($element.children())($scope); 
    }); 
}); 

angular.bootstrap(document, ['exampleApp']); 
+0

Итак, я бы рекомендовал создать директиву для этого тега mod-footer, чтобы вы могли выполнить вызов компиляции внутри своей функции ссылок. – jlowcs

Смежные вопросы