我最近创建了一个带有 Rails 3.2.3 后端的 AngularJS 1.0.0rc8 应用程序,它在开发中运行良好,但是在部署到 Heroku 之后出现了一个Unknown Provider 错误——显然应用程序看不到服务对象。
我知道现在有必要将 angular-resource.js 作为一个单独的文件包含在内,并将ngResource注入到应用程序模块中,如下所示:
// 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'});
}]);
我也知道,当文件被缩小时,控制器无法判断它们的依赖关系是什么,除非它们也被注入到控制器对象中,如下所示:
ContactListCtrl.$inject = ['$scope', '$http', 'Contacts'];
我也尝试过 Angular 推荐的另一种方式,使用括号表示法并传入这样的函数:
var ContactListCtrl= ['$scope', '$http', 'Contacts', function($scope, $http, Contacts) { /* constructor body */ }];
然而,这些似乎都不起作用。
我的应用程序可以看到提供的资源的唯一方法是关闭 Production.rb 文件中的资产压缩,如下所示:
# 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-例子/
如果我有一个相对较大的应用程序,并且我需要压缩资源,如何使用 Angular 和 Rails 来解决这个问题?
谢谢。