FDD (функция по разработке функций) хорошо работает с фреймворками MVC, а угловой - один из них.
Обычно рекомендуется хранить файлы JS (любые файлы JS, а не только угловые) в app/assets/javascripts
, чтобы конвейер Rails автоматически подбирал их. Помимо этого нет конвенции, храните их в любой структуре, которая имеет смысл для вас.
Я говорю вообще, потому что, если ваш угловой код становится большим, вам может быть лучше извлечь его из папки app
. Затем вам нужно настроить конвейер активов для работы с вашей новой структурой.
Для небольших проектов, я хотел, чтобы мои угловые JavaScript файлы в app/assets/javascripts/angular
Взгляды идут в app/assets/templates
.
Одно из препятствий, с которыми я столкнулся, заключалось в том, что Angular view работал с конвейером Rails. В разработка вы ничего не замечаете, но после того, как вы развернете производство, а конвейер активов выйдет, Angular больше не может найти виды.
Для того, чтобы конвейер ресурса обслуживал представления AngularJS, мне пришлось создать кеш шаблона.
// templates.js.erb
(function(){
'use strict';
// version 0.01
// increase this every-time you deploy to production
angular.module('templates', []).run(['$templateCache', function($templateCache) {
<%
environment.context_class.instance_eval { include ActionView::Helpers::JavaScriptHelper }
app_root = File.expand_path('../../../', __FILE__)
templates = File.join(app_root, %w{templates ** *.html})
Dir.glob(templates).each do |f|
key = f.gsub(%r(^#{app_root}/templates/), '')
html = File.read(f).squish
%>
$templateCache.put("<%= key %>", "<%= escape_javascript(html) %>");
<% end %>
}]);
}());
Затем вы должны вводить templates
в ваших модулях
angular.module("myModule", ['templates']);