2015-12-19 4 views
2

Когда я кладу это в моем HTML, он отлично работает:Как динамически создавать директиву ngInclude?

<div ng-include="'my-template.html'"></div> 

Но когда я пытаюсь создать что ngInclude директива динамически с помощью JQuery (после того, как DOM готова), она не работает:

$(function() { 
    var el = document.createElement('div'); 
    el.setAttribute('ng-include', "'my-template.html'"); 
    $('.container').replaceWith(el); 
}); 

Элемент действительно вставлен в DOM с ожидаемым шаблоном, но он не интерпретируется как код AngularJS. Ошибок в консоли нет.

Что мне не хватает?

+1

На самом деле вы не должны смешивать угловые и jQuery. Это плохой подход. –

ответ

2

Вам нужно будет compile ваш HTML

Я не уверен, что синтаксис, как и в файле (используете ли вы requireJS или нет), но это должно быть что-то похожее на составление нового элемента с объем.

angular.element('[ng-app]') 
     .injector() 
     .invoke(['$compile', function ($compile) { 
        var $scope = angular.element(el).scope(); 
        $compile(el)($scope); 
        $scope.$apply(); 
       }]); 
+0

А, это имеет смысл. Однако теперь после компиляции я вижу это в HTML: '' и, естественно, ничего не отображается. Я не использую requireJS. –

+0

Вы пробовали $ scope. $ Apply()? – Amir

+0

С '$ scope. $ Apply()' теперь работает так, как ожидалось. Может быть, вы должны добавить его в свой ответ? –

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