Как исправить заданный корневой маршрут в Rails 4 для AngularJS?

У меня возникли проблемы с интеграцией 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

Я нашел решение.

Вам нужно включить режим HTML5 для AngularJS:

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

Вам также нужно добавить тег <base> html:

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

Он исправляет неверную обработку URL-адреса Angular, когда вы снова нажимаете Enter в URL-адрес URL-адреса браузера. Без этого будет повторяться последний "домен":

локальный: 3000/авт/sign_in

локальный: 3000/авт/авт/sign_in

...

Вам также необходимо написать правильный маршрут на стороне сервера (в Rails) для всех SPA-маршрутов:

конфигурации /routes.rb

  root 'application#main'

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