在AngularJS路由配置中获取Rails路由URL

时间:2014-03-12 00:15:33

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

我试图在Rails应用程序中集成Angular路由。为了防止干扰并防止在应用程序开发过程中路由发生变化时出现问题,我希望防止在when $routeProvider属性中对URL进行硬编码。我的角度文件是.js.coffee.erb脚本,允许咖啡和erb解析。

注意:client_views只是一个呈现params[:id]属性的控制器,工作得很好。

示例:

angular.module('Scheduler', ['ngRoute'])
.config(['$routeProvider', '$locationProvider', ($rp, $lp) ->
  $rp.when('/', {
    templateUrl : '/client_views/index/'
  })
  .when('/employees/new/', {
    templateUrl : '/client_views/employee_new/  '
  })
  $lp.html5Mode(true)
  @
])

理想情况下,我希望有类似的内容:

angular.module('Scheduler', ['ngRoute'])
.config(['$routeProvider', '$locationProvider', ($rp, $lp) ->
  $rp.when('/', {
    templateUrl : '<%= some_rails_url_fn :controller => "client_views", :action => "index" %>'
  })
  .when('/employees/new/', {
    templateUrl : '<%= some_rails_url_fn :controller => "employee", :action => "new" %>'
  })
  $lp.html5Mode(true)
  @
])

我看到了url_for方法,但它显然已被弃用(我使用的是Rails 4),并且它引发了一个未定义的方法错误。

此外,这是在Rails应用程序中使用Angular路由的正确方法吗? routes.rb中:

Scheduler::Application.routes.draw do
  root :to => "home#index"

  # Routes to current page
  match '/', :to => 'home#index', via: [:get]
end

我感觉重定向到#home; home #index&#34;会在某个时候破裂......

1 个答案:

答案 0 :(得分:0)

url_for未被弃用,在预编译资产的上下文中无法作为帮助程序访问。您可以通过专门引用它们来访问URL帮助程序。

<% url = Scheduler::Application.routes.url_helpers %>

angular.module("Scheduler", ["ngRoute"]).config [ "$routeProvider", "$locationProvider", ($rp, $lp) ->

  $rp.when "/",
    templateUrl : "<%= url.url_for controller: :client_views, action: :index %>"

  .when "/employees/new/",
    templateUrl : "<%= url.url_for controller: :employee, action: :new %>"

   $lp.html5Mode(true)
   this
]