0

Я использую RequireJS в своем приложении «Угловое». Я хотел бы require мой pill, где он действительно используется.Требовать директиву по шаблону

pill.js

define([], function() { 
    angular.module('app').directive('pill', function() { 
     return function(a,b,c) { 
      b.html("A pill"); 
     }; 
    }); 
}); 

incl.html

<div load-script="require(['pill']);"></div> 
<div pill>test</div> 

main.html

<html ng-app="app"> 
    <head> 
     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.js"></script> 
     <script src="http://requirejs.org/docs/release/2.1.10/comments/require.js"></script> 
    </head> 
    <body> 
     <script> 
      var app = angular.module("app", []) 
       app.directive('loadScript', function() { 
         return { 
          link: function(scope, element, attrs) { 
           (new Function(attrs.loadScript))(); 
          } 
         }; 
        } 
       ); 
     </script> 
    <div ng-include="'incl.html'"></div> 
    </body> 
</html> 

Этот короткий пример должен ДЕЦЛ являются директивой pill, которая просто преобразует текст с test в A pill внутри файла incl.html. Однако это не работает. Я думаю, это потому, что директива pill зарегистрирована после составления incl.html.

Я хочу, чтобы избежать объявления директив somwhere globaly, например, внутри main.html, потому что он там не используется. Является ли это требование достижимым элегантным способом?

ответ

0

Наилучший способ для загрузки directive по запросу - создать его с помощью $compileProvider, который вам нужно будет кэшировать во время фазы app.config. Кроме того, вместо того, чтобы использовать ng-include, я бы посоветовал вам загрузить directive вам, когда частичное представление, которое использует его, загружается.

Для этого на самом деле это довольно сложно. Я создал такую ​​библиотеку, которая должна помочь вам начать работу:

http://marcoslin.github.io/angularAMD/

angularAMD бы сделать его проще для вашего создать независимый файл, который позволит вам настроить RequireJS зависимость для загрузки directive только на обертонов, что нужно.

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