因此,我尝试在 Ruby on Rails 应用程序中尝试 Angular 路由。
问题是,当我降落在一条路线上时,比如说'/'
,并且我有一个 Angular 路由,当我降落在它上面时,它应该在我的 route 加载一个模板所需的目录,那么我的 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"):
所以基本上它似乎不会尝试从文件夹加载我的文件,而是尝试将我告诉 Angular 路由的路径放入 URL,然后发出请求?
因为如果我将 templateUrl:
替换为 /users
(这是我的应用程序中以 html 响应的实际路由),那么它将有效地路由到它。但这不是我想要的行为。
我希望 Angular 将我的 ng-view 中的 html 模板替换为我输入调用的路由时指定的模板。
这是我的 Angular 路由代码:
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)目录“/public/templates”
- 如果您仍然想使用 ERB 来渲染模板,您将需要一些带有路由(config/routes.rb)的解决方案,该模板将页面 Controller 绑定(bind)到网址:/templates/sth.html,但我想这相当丑陋的解决方案。
- 我认为最适合您的解决方案是遵循此 great tutorial :) 他们将模板存储在 public/templates 目录中。
关于javascript - Angular 路由无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27253837/