将角度文件存储在轨道中的最佳位置

Best place to store angular files in rails

本文关键字:轨道 最佳位置 存储 文件      更新时间:2023-09-26

我计划将我当前的应用程序转换为角度应用程序。我以前从来没有机会和有棱角的铁轨一起工作。我计划在rails应用程序中逐个功能地实现angular。但我仍然担心文件夹的结构。

关于在rails应用程序中保存角度文件的位置,有什么约定吗?

此外,angular是这种开发(逐个功能)的好候选者吗?还是我应该研究其他技术?

FDD(逐个功能开发)与MVC框架配合良好,Angular就是其中之一。

通常建议将JS文件(任何JS文件,而不仅仅是Angular文件)存储在app/assets/javascripts中,以便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的资产管道一起工作。在开发中,您不会注意到任何东西,但一旦您在production部署,并且资产管道启动,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']);