2015-09-11 2 views
-1

Мне интересно, какая практика лучше?AngularJS: Хорошая практика - где положить шаблоны? (завод/директивы)

  1. Положить шаблоны в директивы?
  2. Поместите шаблоны на завод, введите эту фабрику внутри директив и используйте шаблоны с фабрики?

Для лучшего понимания:

Пример 1:

angular.module('myApp').directive('myDirective1', function() { 
    var myTemplate = '<div> 
         //a looooot of HTML 
         </div>'; 

    return { 
     template: myTemplate 
    }; 
}); 

Пример 2:

angular.module('myApp').directive('myDirective2', ['templateFactory', function (templateFactory) { 

    return { 
     template: templateFactory.myTemplate 
    }; 
}]); 


angular.module('myApp').factory('templateFactory', function() { 
    var Template = '<div> 
         //a looooot of HTML 
        </div>'; 
    return { 
     myTemplate = Template 
    } 
}); 

Рассмотрим, что у меня есть, например 20 директив и каждый из них собственный шаблон - поместите все шаблоны внутри фабрики или оставьте их в директивах?

Какой способ лучше использовать, лучше для чтения, лучше всего?

Я упростил эти директивы для чтения и лучше понять эту проблему, но в моем проекте директив есть много вещей внутри (контроллеры, область и т.д.)

+2

Завод будет в списке способов сделать это. Другие способы: '$ templateCache', шаблоны тегов скриптов, файл сервера и т. Д. – charlietfl

+0

Я бы рекомендовал хранить шаблоны, внешние по отношению к директиве, и использовать' templateUrl:/path/to/tmpl' Редактирование шаблонов позже в строке 'template' может стать громоздким , Я бы определенно использовал '$ templateCache' как @charlietfl, упомянутый выше. –

ответ

1

Что я хотел бы сделать, это положить шаблоны отдельные файлы под ресурсами.

В директивах использовать

angular.module('myApp').directive('myDirective1', function() { 
    return { 
     templateUrl: "path/to/the/template.html" 
    }; 
}); 

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

angular.module('myApp').directive('myDirective1', function() { 
    return { 
     template: "<div> ... </div>" 
    }; 
}); 
1

Я использую эту файловую структуру, и я очень уверен в этом;)

js 
|- controllers 
|- directives 
    |- ExampleDirective 
    |- ExampleDirective.js 
    |- ExampleDirective.html 
    |- ... 
|- filters 
|- services 

Затем просто использовать директиву с templateUrl так:

angular.module('myApp').directive('ExampleDirective', function() { 
    return { 
     templateUrl: '[myPath]/ExampleDirective.html' 
    }; 
}); 
+0

Структура делает модульность трудной для достижения. Несмотря на то, что это началось с начальных проектов, не прошло много времени, чтобы понять, что он не очень эффективен. – charlietfl

+0

Ну, я думаю, это зависит от того, насколько велика (с точки зрения разнообразия модулей) ваше приложение. Если у вас есть только несколько (логически разделенных) модулей, и ваше внимание сосредоточено на логике контроллера и шаблона, это может быть правильным выбором. – DonJuwe

1

После 2 лет борьбы с AngularJS мы пришли к модульной структуре, где каждый модуль мог быть независимым компонентом и включать директивы, servic es, шаблоны, а также тесты.

Также мы определим 2 общих модулей: Layer данных и UI Library.

enter image description here

+0

После битвы с разными установками, я также пришел к такому выводу. Чтобы разделить компоненты в свою папку со своими собственными директивами, службами, контроллерами и т. Д. И иметь общую/общую папку для всех используемых компонентов, также имеет папку с директивой, службой, фильтром и т. Д. –

+0

Мне нравится попытка модульности, но как вы предоставляете кросс-доступ для фильтров, сервисов и т. Д.? Просто добавив 2 * грязные * общие модули? – DonJuwe

+0

это зависит от вашей архитектуры проекта. и действительно то, что я называю «Data Layer», может быть довольно грязным –

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