如何在 Rails 4 中为 AngularJS 更正设置根路由?

Posted

技术标签:

【中文标题】如何在 Rails 4 中为 AngularJS 更正设置根路由?【英文标题】:How to correct set root route in Rails 4 for AngularJS? 【发布时间】:2014-04-19 02:17:59 【问题描述】:

我在将 Rails 路由与 AngularJS 集成时遇到了麻烦。

当我在浏览器输入中转到“localhost:3000”时,它会将我重定向到“localhost:3000/#/auth/sign_in”

但“sign_in”模板未呈现。

然后,如果我转到“localhost:3000/#/”,它会将我重定向到“localhost:3000/#/auth/sign_in”并正确呈现“sign_in”模板。

如何解决它,当我转到“localhost:3000”然后渲染“sign_in”时?

此处的路由器代码:http://pastie.org/8917505

谢谢!

【问题讨论】:

【参考方案1】:

我找到了解决办法。

您需要为 AngularJS 启用 HTML5 模式

angular.module('app').config(['$routeProvider', '$locationProvider',
  function ($routeProvider, $locationProvider)  
  ...
    $locationProvider.html5Mode(true);
  ]
)

您还需要添加<base> html标签:

<html>
  <head>
    <base href="/">
      ...
  </head>
</html>

当您再次在浏览器 URL 输入中按 Enter 时,它修复了 Angular 对 URL-path 的错误处理。没有这个,最后一个“域”将被重复:

localhost:3000/auth/sign_in

localhost:3000/auth/auth/sign_in

...

您还需要在服务器端(在 Rails 中)为所有 SPA 路由编写正确的路由:

config/routes.rb

  root 'application#main'

  get '*path', to: 'application#main'

【讨论】:

这个在 IE9 中测试过吗?我期望的是他们重定向到域的根目录并在之后处理所有内容。

以上是关于如何在 Rails 4 中为 AngularJS 更正设置根路由?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Rails 4.2 中为多对多关联创建表单

如何在 Rails 4 中为多对多关联制作带有子表单的表单?

Rails:如何在 Rails 中为 Devise 设置密钥?

如何在 Ruby on Rails 4 中为 post 生成唯一的随机 id?

如何在 Rails 中为带有单选按钮的帖子分配一个类别?

在Rails中为Postgres JSON列设置默认值< 4