【问题标题】:Rails routing + AngularJS routingRails 路由 + AngularJS 路由
【发布时间】:2014-04-08 21:10:51
【问题描述】:

我的 Angular 应用程序中有以下代码。

app.config(function($routeProvider, $locationProvider) {
   $locationProvider.html5Mode(true);
   $routeProvider
     .when("/users/:u_id/restaurants/:r_id/menus/:m_id/sections/:sec_id/items", { templateUrl: "/assets/menus/items.html", controller: "MenuItemCtrl" })
});

当我使用导航到路径时它工作正常

<a href="./sections/{{section.id}}/items">View Items</a>

但是当我刷新页面或直接转到 url 时,它会引发 rails 路由错误

No route matches [GET] "/users/3/restaurants/3/menus/4/sections/4/items"

如果我在 routes.rb 中创建此路由,它只会返回与响应关联的 JSON,并且不会路由到正确的模板。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 在 Rails 中的路由配置末尾添加一个“catch all”路由:get '(*url)' =&gt; 'home#index' 在本例中,home_controller 的 index() 方法为单页应用程序提供服务。详情请见this answer

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


【解决方案1】:

在 rails 路由中,您必须将该请求重定向到 angular 基本 url,以便可以执行 angular。

否则,rails 会响应请求。这就是 html5mode 路由的工作原理。

编辑:

假设您的角度来自application#home。 你希望所有的 GET 请求都被重定向到那里,这样 Angular 就可以工作了。

添加这条路线get '*path', to: 'application#home' 将使所有 GET 请求成为角度页面。

【讨论】:

  • 你能提供一个使用我提供的代码的例子吗?我不完全理解
  • 这在获取 JSON 时可能会带来一些问题,但您可以在路由中添加 format: :html。此外,使用 hashbang 模式而不是 html5 更简单。这个答案可能适合你。 stackoverflow.com/questions/16677528/…
  • 当我这样做时,它只会将我重定向到该页面,而不管我输入的网址如何。
  • 确实如此。但现在角度路线应该发挥作用。
猜你喜欢
  • 2014-04-15
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 2017-08-29
相关资源
最近更新 更多