我有一个rails应用程序,使用angularjs进行客户端开发。我尝试加载位于"应用程序/资产/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',
。
为什么第一种方法还不够? 角度轨道模板 gem 不应该在应用程序/资产/JavaScript/模板中查找模板吗?
为什么我应该在我的 JavaScript 中使用资产的完整路径?
我的问题是sprockets
不兼容。版本 2.1.3 虽然有效,所以我把它放在我的Gemfile
:
gem 'sprockets', '2.12.3'
我跑bundle update sprockets
,都是桃色的。
实践表明,您应该将 Angular 模板保存在./public
文件夹中。例如,在public
文件夹中创建一个名为模板的文件夹。现在你可以这样称呼它们:templateUrl: 'templates/index.html'
这是有道理的,因为app/assets/
确实仅用于javascript和css文件。此外,您还有 html 文件 在 app/views
,但这些文件是由服务器编译的,因为它们使用扩展名.erb
。您想要的是随时可以使用常规html
文件。所以你把它们放到公用文件夹。
试试这个,我希望这会奏效。
myApp.config(function ($routeProvider) {
$routeProvider.
when('/', {
templateUrl: '/index.html',
controller: 'MainController'
}).
otherwise({
redirectTo: '/'
});
});
我通过将"gem'sprockets'"添加到 Gemfile 中来解决此问题