如何在Sinatra中为AngularJS html5Mode定义路由

时间:2013-08-12 06:54:01

标签: ruby angularjs sinatra angularjs-routing

这是我在Sinatra的代码:

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抛出异常,因为AngularJS在客户端更改了url,而Sinatra找不到url路径,这对Sinatra来说是绝对正确的行为。现在的问题是如何在Sinatra中处理这类异常?我应该定义哪条路线?请注意,我仍然需要Sinatra在其他情况下抛出异常。

1 个答案:

答案 0 :(得分:1)

您需要允许sinatra中的所有路线与角度路线配置相同。所以,

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