2014-12-02 150 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