5

我正在关注本教程,尽管将其添加到 Gem 文件并捆绑安装它工作正常。当我尝试将它包含到 application.js 文件中时,加载它时出现以下错误:

throw Error("Sprockets::FileNotFound: couldn't find file 'angular'\n  (in /my/path/to/rails/app/assets/javascripts/application.js:13)")

application.js 文件如下所示(从第 13 行开始):

//= require angular
//= require jquery
//= require jquery_ujs
//= require jquery.ui.autocomplete
//= require bootstrap
//= require pusher.min.js
//= require pusher_setup
//= require_directory .

因此,我的问题是如何成功地将 AngularJS 包含到我的 Rails 项目中?

我目前正在使用 Rails 3.2.2 和 Ruby 1.9.3。

4

4 回答 4

6

我遇到了同样的问题。我通过以下方式解决了它。

1)就我而言,文件//= require_tree .中缺少application.js..所以我添加了它。

2) 重新启动 Apache 服务器(如果是 webrick,则重新启动它)

于 2012-07-02T11:50:45.867 回答
5

添加 gem 后,您始终必须重新启动 Web 服务器。

通过查看 gem 的源代码,它有 angular javascripts vendor/assets/javascripts,这意味着它们只需做//= require angular. 如果它们没有加载,可能是因为需要重新启动服务器并且您需要捆绑安装。

至于require_tree .,我强烈建议不要这样做,因为这意味着您将失去对加载顺序的控制。

例如,Angular 本身是用它自己的 jQuery 版本(jQuery-lite)打包的,但是如果在加载时已经存在 jQuery,它将使用全局版本。

这意味着做

//= reqiure angular 
//= require jquery

会做一些不同的事情,而不是

//= require jquery
//= require angular

还有许多其他情况下加载顺序很重要,例如,如果您有 Backbone.js 和 Underscore,您将希望在 Backbone 之前加载 Underscore,等等。

作为一般做法,我总是建议只使用require,除非您在顺序无关紧要的情况下加载自己的代码,例如//= require_tree ./controllers您自己的控制器目录。在那种情况下,我会说require_tree完全没问题。

于 2012-07-03T19:51:28.587 回答
4

如果您像这样使用,请在您的 gemfile 中:

group :assets  do
   gem 'angularjs-rails'
end

然后删除该组 :assets 东西,它应该很简单,没有阻塞:

前任:

gem 'angularjs-rails'

它肯定会起作用

于 2014-12-04T09:46:45.300 回答
2

万一有人遇到同样的问题并且提供的解决方案不起作用。我已//= require angular在资产中添加

group :assets do
//= require angular
end

但是我仍然遇到同样的错误。经过一番搜索,我发现由于某种原因需要将其添加到 assets group 之外。现在一切都好。不确定这是否是最好的方法,但是我不再收到此错误。

于 2014-05-21T01:15:14.573 回答