所以我正在尝试在我的Ruby on Rails应用程序中尝试Angular路由。
问题是,当我登陆一条路线时,假设'/'
,并且我有一个角度路由,说当我登陆它时,它应该在我想要的目录中加载一个模板,然后我的 Rails 服务器将抛出此错误:
Started GET "/templates/index.html.erb" for 127.0.0.1 at 2014-12-02 18:03:39 +0200
ActionController::RoutingError (No route matches [GET] "/templates/index.html.erb"):
所以基本上它似乎没有尝试从文件夹中加载我的文件,而是尝试将我告诉角度路由的路径放入 URL,然后发出请求?
因为如果我将templateUrl:
替换为 /users
,这是我应用程序中使用 html 响应的实际路由,那么它将有效地路由到它。但这不是我想要的行为。
我希望 Angular 将我的 ng-view 中的 html 模板替换为我输入被调用路由时指定的模板。
这是我的角度路由代码:
App = angular.module("App", ['ngRoute', 'growlNotifications'])
App.config ($httpProvider) ->
authToken = $("meta[name="csrf-token"]").attr("content")
$httpProvider.defaults.headers.common["X-CSRF-TOKEN"] = authToken
App.config ($routeProvider, $locationProvider) ->
$locationProvider.html5Mode true
$routeProvider
.when '/',
templateUrl: 'templates/index.html.erb',
controller: 'VisitorsCtrl'
.when '/users',
templateUrl: '../../views/users/index.html.erb',
controller: 'UsersCtrl'
.otherwise redirectTo: "/"
另外,在我的application.html.erb
中,我已将base href
设置为'/'
我的模板目前位于这样:app/assets/javascripts/angular/templates
并且我的路由是在angular
文件夹中定义的
这里可能有什么问题?
- 您想获取 ERB 模板,您可能希望将 erb 更改为仅 html
- 您的模板位于错误的目录中,对于您想要的内容,您需要使用正确的路径,例如:"/assets/angular/templates/index.html"或将您的模板放入公共目录"/public/templates">
- 如果您仍然想使用 ERB 来渲染模板,您将需要一些带有路由 (config/routes.rb( 的解决方案,这会在 url:/templates/sth.html 上临时绑定到页面控制器,但我想这是非常丑陋的解决方案。
- 我认为最适合您的解决方案是遵循这个很棒的教程:)他们将模板存储在公共/模板目录中。