角度路由无法正常工作

时间:2014-12-02 16:08:27

标签: javascript ruby-on-rails ruby angularjs ruby-on-rails-4

所以我试图在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文件夹中定义

这可能是什么问题?

1 个答案:

答案 0 :(得分:1)

  1. 您想要获取ERB模板,您可能希望将erb更改为仅html
  2. 您的模板位于错误的目录中,因为您需要使用正确的路径,例如:“/assets/angular/templates/index.html”或将模板放入公共目录“/ public / templates”
  3. 如果你想仍然使用ERB渲染模板,你需要一些带路由的解决方案(config / routes.rb)这个tempaltes到url:/templates/sth.html上的页面控制器绑定,但我想这是相当的丑陋的解决方案。
  4. 我认为最适合您的解决方案是遵循此great tutorial :)他们将模板存储在public / templates目录中。