uaKorona
@uaKorona
Front-End разработчик

Как динамически создать директиву в контроллере AngularJS ?

Всем привет!
Есть следующая задача:
В SPA на AngularJS в конкретном контроллере нужно динамически объявить директиву, полученную с сервера с помощью AJAX.
На сервере у меня хранятся директивы, описывающие формы ввода (более 3000 форм).
Точнее, директиву я объявляю один раз, но ее реализацию хочу задавать динамически на основе полученных данных.

Пробовал следующее:

// метод контроллера
$scope.add = function(ev,attrs){
        //ajax вызов
        .success(function (data, status, headers, config) {
        // получили директиву с сервера
        var exFormDirective = data.newForm;
       // добавили ее к модулю
        myApp.directive('exForm', exFormDirective );
       // динамически создали элемент
       var exFunction = angular.element(document.createElement('ex-Form'));
       // скомпилировали 
       var el = $compile( exFunction )( $scope );
       // Добавили созданный элемент на страницу
        angular.element(document.getElementById('exTempleate')).append(exFunction);


Ошибок никаких не получаю при выполнении, но и директива динамически не создается ((
Если то же самое сделать с заранее описанной и подключенной директивой (т.е. подключать не в контроллере, а стандартно) - то все работает.
Но так как директив очень много - то все оформить заранее представляется невыполнимой задачей.
Предполагаю, что дело в
// добавили ее к модулю
        myApp.directive('exForm', exFormDirective );

но что именно не так, может кто-то подскажет ?
  • Вопрос задан
  • 2725 просмотров
Пригласить эксперта
Ответы на вопрос 1
Вот здесь что-то есть о Вашей проблеме
stackoverflow.com/questions/15279244/dynamically-a...
jsfiddle.net/ftfish/KyEr3

Но суть одна, директива должна быть подключена.. Возможно не участвовать в текущей html выдаче, а описываться из кода полученного по аяксу, но сам код директивы(контроллеров, линкеров, и.т.д) должен присутствовать.

А иначе.. что то типа этого weblogs.thinktecture.com/pawel/2014/07/angularjs-d...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы