javascript - AngularJS + Rails - 压缩 Assets 时的问题

标签 javascript ruby-on-rails-3 angularjs

我最近创建了一个带有 Rails 3.2.3 后端的 AngularJS 1.0.0rc8 应用程序,它在开发中运行良好,但是在部署到 Heroku 之后出现了一个Unknown Provider error - 显然是应用程序看不到服务对象。

我知道现在有必要将 angular-resource.js 作为一个单独的文件包含进来,并将 ngResource 注入(inject)到应用程序模块中,如下所示:

// main app javascript file

'use strict';

angular.module('contactapp', ['ngResource']).
  config(['$routeProvider', function($routeProvider) {
  $routeProvider.
      when('/contacts', {template: 'assets/app/partials/contact-list.html', controller: ContactListCtrl}).
      when('/contacts/new', {template: 'assets/app/partials/new-contact.html', controller: ContactListCtrl}).
      when('/contacts/:contact_id', {template: 'assets/app/partials/contact-detail.html', controller: ContactDetailCtrl}).
      otherwise({redirectTo: '/contacts'});      

}]);

我也知道,当文件被缩小时, Controller 无法判断它们的依赖关系是什么,除非它们也像这样注入(inject)到 Controller 对象中:

ContactListCtrl.$inject = ['$scope', '$http', 'Contacts'];

我也尝试过使用 Angular 推荐的另一种方法,使用括号表示法并传入这样的函数:

var ContactListCtrl= ['$scope', '$http', 'Contacts', function($scope, $http, Contacts) { /* constructor body */ }];

然而,这些似乎都不起作用。

我的应用程序可以看到提供的资源的唯一方法是关闭 Production.rb 文件中的 Assets 压缩,如下所示:

# Compress JavaScripts and CSS
  config.assets.compress = false

我花了几个小时才弄清楚这个问题,但我最近看到另一个 Rails + AngularJS 应用程序也有同样的问题。

Jens Krause 得出了相同的结论并在他的博客中对此进行了解释:http://www.websector.de/blog/2012/01/17/fun-with-angularjs-rails-coffeescript-sass-another-cafe-townsend-example/

如果我有一个相对较大的应用程序,并且我需要压缩 Assets ,我该如何使用 Angular with Rails 解决这个问题?

谢谢。

最佳答案

如果您使用的是 Rails 4,请将生产和暂存环境中的 js_compressor 更改为:

config.assets.js_compressor = Uglifier.new(mangle: false)

关于javascript - AngularJS + Rails - 压缩 Assets 时的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10659890/

相关文章:

ruby-on-rails - Rails 3 : Retrieve all child records where parent model attribute equals search key

ruby-on-rails - 在 rails 中解析日期

javascript - 在单个标签中使用两个 ngRepeat

javascript - 使用 Phonegap 和 Disqus javascript SDK 问题

JavaScript:文本元素返回 "undefined"

javascript - 如何通过递归获取使用 Promise?

angularjs - 将 Angularjs 与 Node.js 一起使用时,找不到 Node_modules 下的 Node.js 文件

javascript - 为什么某些字符出现在 JS console.log 中的 'broken'?

windows - Webrick 和 Thin 在 Windows 中提供静态文件的速度非常慢。我怎样才能加快他们的速度?

javascript - Angularjs $scope 操作,简单的一个