我计划将当前的应用转换为有角度的应用。我以前从来没有机会和角铁一起工作。我打算按功能在rails app功能中实现angular。但我仍然担心文件夹结构。
是否有任何关于将角度文件保存在rails应用程序中的约定?
角度也是这种开发的良好候选者(按功能特征)还是我应该研究其他技术?
答案 0 :(得分:1)
FDD(按功能开发为特色)适用于MVC框架,而Angular就是其中之一。
通常建议在app/assets/javascripts
中存储JS文件(任何JS文件,而不仅仅是Angular),以便Rails资产管道自动获取它们。除此之外,没有任何约定,将它们存储在对你有意义的任何结构中。
我的一般说法是因为如果您的Angular代码变大,最好将其从app
文件夹中提取出来。然后,您必须配置资产管道以使用新结构。
对于小型项目,我喜欢将我的Angular javascript文件保存在app/assets/javascripts/angular
app/assets/javascripts/angular
/controllers/
/directives/
/helpers/
/models/
/services/
apps.js
templates.js.erb
观看次数为app/assets/templates
。
我遇到的一个重大障碍是让Angular视图与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']);