2014-12-02 152 views
0

所以我试图在我的Ruby on Rails应用中尝试角度路由。角度路由不能正常工作

问题是,当我着陆在一条路线上时,我们假设为'/',并且我有一个角度路由,表示当我登陆它时,它应该在我所需的目录中加载一个模板,然后我的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角路由路径,然后发出请求?

因为如果我用/users替换templateUrl:,这是我的应用中用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文件夹

这里有什么问题?

回答

1
  1. 你要得到ERB模板,你可能想改变该局为HTML
  2. 你的模板是错误的目录,你需要使用的对像正确的路径,你想要什么:“/资产/angular/templates/index.html“或将你的模板放到公共目录”/ public/templates“
  3. 如果你想继续使用ERB渲染模板,你需要一些解决方案(config/routes.rb )这个tempaltes页面控制器绑定在url:/templates/sth.html,但我想这是相当丑陋的解决方案。
  4. 我认为最好的解决方案是遵循这个great tutorial :)他们将模板存储在public/templates目录中。
+0

会给你的解决方案一个尝试并报告回来! – Kaspar 2014-12-03 10:20:17

+0

好吧,我通过将文件更改为.html并使用您提供给我的路径来解决问题。但为什么它是'assets/angular/templates/public.html'?当角度文件夹也在JavaScript文件夹中,而不仅仅是资产文件夹? – Kaspar 2014-12-03 14:32:58

+0

这就是资产如何通过Sprockets从Rails编译和发布的方式。如果您的资产目录中仍然有模板,那么您在生产环境中可能会遇到问题... – 2014-12-03 18:20:41