2

我有一个 Rails 应用程序,使用 angularjs 进行客户端开发。我尝试加载位于 `app/assets/javascripts/templates/' 中的模板:

myApp.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
      when('/', {
        templateUrl: '/index.html',
        controller: 'MainController'
      }).
      otherwise({
        redirectTo: '/'
      });
  }]);

但我总是收到错误消息:“错误:[$compile:tpload] 无法加载模板:/index.html”。

我试图将“模板”文件夹移出 javascripts - app/assets/templates,并通过将以下行添加到 config/application.rb 来将其添加到我的资产管道负载中:config.assets.paths << Rails.root.join("app","assets","templates")

在使用模板的完整路径之前,我一直收到相同的错误消息:templateUrl: '/assets/index.html',.

  1. 为什么第一种方法还不够?angular-rails-templates gem 不应该在 app/assets/javascripts/templates 中寻找模板?

  2. 为什么我应该在我的 javascript 中使用资产的完整路径?

4

4 回答 4

8

我的问题是sprockets不兼容。版本 2.1.3 可以工作,所以我把它放在我的Gemfile

gem 'sprockets', '2.12.3'

我跑了bundle update sprockets,一切都很好。

于 2015-04-20T16:39:29.560 回答
4

实践表明,您应该将 Angular 模板保存在./public文件夹中。例如,在文件夹中创建一个名为模板的public文件夹。现在你可以这样称呼他们:templateUrl: 'templates/index.html'

这是有道理的,因为app/assets/确实只用于 javascript 和 css 文件。您也有 html 文件app/views,但这些文件是由服务器编译的,因为它们使用.erb扩展名。您想要的是html准备好随时使用的常规文件。所以你把它们放到公共文件夹中。

于 2015-04-20T13:42:39.437 回答
0

试试这个,我希望这会奏效。

 myApp.config(function ($routeProvider) {
  $routeProvider.
    when('/', {
     templateUrl: '/index.html',
     controller: 'MainController'
    }).
    otherwise({
     redirectTo: '/'
   });
});
于 2015-04-20T13:35:17.003 回答
0

我通过在 Gemfile 中添加“gem 'sprockets'”解决了这个问题

于 2015-06-30T22:42:05.500 回答