Директива AngularJS, загружаемая динамически в ng-include, не работает

У меня есть пользовательская директива, которая добавляет html.

myAppModule.directive('myDirective', function() {
    var linker = function(scope, element) {
        return element.html("<b>directive loaded</b>");
    };
    return {
        restrict: "E",
        rep1ace: true,
        link: linker,
        scope: false
    };
});

Эта директива загружается и используется в динамически загружаемом html, который подключается через ng-include.

<script type="text/javascript" src="dynamicscript.js"></script>
<my-directive>...</my-directive>

Но это не работает. Функция linker никогда не вызывается. Это работает, если я перемещаю загрузку скрипта dynamicscript.js из включенного html в файл index.html.

Вот Plunkr


person oliholz    schedule 21.11.2013    source источник
comment
Я не думаю, что вы можете включать сценарии JS из шаблонов Angular.   -  person AlwaysALearner    schedule 21.11.2013
comment
Вызывается скрипт, и директива добавляется в модуль приложения. Но это не относится к <my-directive>   -  person oliholz    schedule 21.11.2013
comment
Это потому, что ngInclude запускается после того, как Angular скомпилировал страницу. Ручная загрузка может помочь.   -  person AlwaysALearner    schedule 21.11.2013
comment
Насчет начальной загрузки тоже не уверен.   -  person AlwaysALearner    schedule 21.11.2013


Ответы (2)


Просто используйте RequireJS для загрузки контроллеров, директив и т. д.

С помощью специальных плагинов также можно загружать файлы CSS и HTML.

Вот отличный пример от Бена Наделя: http://www.bennadel.com/blog/2554-Loading-AngularJS-Components-With-RequireJS-After-Application-Bootstrap.htm

person André    schedule 25.11.2013

Все файлы JS должны быть включены в index.html. Файлы JS (сервисы, модули, контроллеры), загружаемые динамически с помощью ng-include, работать не будут.

person CodingNinja    schedule 21.11.2013
comment
в angular 1.1.5 загрузка контроллера во включенных html-полях работала хорошо. В 1.2 даже это уже не работает. Но почему? Есть ли обходной путь? - person oliholz; 21.11.2013