Как определить маршрут в Синатре для AngularJS html5Mode

1

Вот мой код в Синатре:

get '/' do
  @title = 'AngularJS html5Mode: true'
  haml :main
end

И AngularJS:

  angular.module('myApp', ['ngResource']).config(function($routeProvider, $locationProvider) {
    $routeProvider.when('/sweets/:id', {
      templateUrl: '/sweet.html',
      controller: 'SweetCtrl'
    }).otherwise({
      redirectTo: '/'
    });
    $locationProvider.html5Mode(true);
  });

Это работает отлично, но после перезагрузки страницы с /sweets/1 url, Sinatra выбрасывает исключение, потому что url был изменен на стороне клиента AngularJS, и Sinatra не может найти URL-адрес, что является абсолютно правильным поведением для Sinatra. Теперь вопрос заключается в том, как справляться с этими исключениями в Синатре? Какой маршрут я должен определить? Обратите внимание, что мне все еще нужна Синатра, чтобы бросать исключения в других случаях.

Теги:
sinatra
angularjs-routing

1 ответ

1

Вы должны разрешить все маршруты в синатре, такие же, как ваша конфигурация углового маршрута. Так,

get '/' do
  @title = 'AngularJS html5Mode: true'
  haml :main
end
get '/:id' do
  @title = 'AngularJS html5Mode: true'
  haml :main
end
  • 0
    Спасибо за ваш ответ! Для меня это дублирование кода, которое, похоже, будет сложно поддерживать в будущем. Есть ли способ синхронизировать их обоих?
  • 0
    @hawk вы можете использовать звезду вместо: id см. sinatrarb.com/intro.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню