2014-11-04 2 views
3

Я хотел бы знать, что является лучшим способом повторного использования одной и той же директивы для нескольких модулей. На мой взгляд, я считаю, что директивы похожи на DOM-модули, поэтому архитектура углового для этого немного раздражает мою точку зрения.Повторное использование директив для нескольких модулей

То, как я это делаю сейчас:

var mainapp = angular.module('MainApp'); 
mainapp.controller(...); 

var otherapp = angular.module('OtherApp'); 
otherapp.controller(...); 

И в другом файле у меня есть моя директива я хочу использовать в этих двух контроллеров/модули

mainapp.directive('autoselect', function(){ ... }); 

Но, как вы можете см., я должен указать, в каком приложении я должен его использовать. Если я хочу использовать в обоих случаях, мне нужно скопировать два раза один и тот же код?

ответ

5

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

angular.module('CommonApp',['OtherCommonModule1','OtherCommonModule2']).directive(..); 

var mainapp = angular.module('MainApp', ['CommonApp']); 
mainapp.controller(...); 

var otherapp = angular.module('OtherApp', ['CommonApp']); 
otherapp.controller(...); 
+0

вы бьете меня к нему! :) – Digitrance

3

Нет, вы не должны указать, какие приложения/модуль вам нужно использовать директиву в

Поясню:.

  1. В angularJS, все это модуль. Например, MainApp, OtherApp и даже директива autoselect - это модуль.
  2. Каждый модуль может «зависеть» от одного или нескольких модулей.

Итак, вот как я бы разработать решение:

angular.module('com.example.mydirective', []) 
    .directive('autoselect', function() { ... }); 

angular.module('MainApp', ['com.example.mydirective']); 
    .controller(...); 

angular.module('OtherApp', ['com.example.mydirective']); 
    .controller(...); 

Одна вещь, которую я хотел бы добавить: квадратные скобки, обозначающие зависимость имеет особое значение.

angular.module('module-name', []); // this line tells angularJS to create a new module 

angular.module('module-name'); // no brackets -- this asks angularjs to return a pre-existing module 

Надеется, что это помогает

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