Недавно я создал приложение AngularJS 1.0.0rc8 с серверной частью Rails 3.2.3, и оно отлично работало в процессе разработки, но после развертывания на В 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, у которого была такая же проблема.
Йенс Краузе пришел к такому же выводу и объясняет его в своем блоге: http://www.websector.de/blog/2012/01/17/fun-with-angularjs-rails-coffeescript-sass- other-cafe-townsend-example/
Если у меня относительно большое приложение и мне нужно сжать ресурсы, как мне обойти это с помощью Angular с Rails?
Спасибо.