Rails不能包含AngularJS

Hen*_*jie 5 javascript ruby-on-rails ruby-on-rails-3.2 angularjs

我正在学习本教程,虽然将它添加到Gem文件并捆绑安装但它工作正常.我尝试将其包含到application.js文件中的那一刻,加载时出现以下错误:

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

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 .
Run Code Online (Sandbox Code Playgroud)

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

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

GBD*_*GBD 6

我遇到了同样的问题.我通过以下方式解决了这个问题

1)在我的情况下,文件//= require_tree .中丢失application.js..所以我添加了它.

2)重启Apache服务器(如果webrick,然后重启)


Jak*_*old 5

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

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

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

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

这意味着做什么

//= reqiure angular 
//= require jquery
Run Code Online (Sandbox Code Playgroud)

会做些不同的事情

//= require jquery
//= require angular
Run Code Online (Sandbox Code Playgroud)

在加载顺序很重要的情况下还有很多其他情况,例如,如果你有Backbone.js和Underscore,你会想要在Backbone之前加载Underscore等.

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