2013-08-12 35 views
1

这是我在西纳特拉代码:如何西纳特拉定义AngularJS html5Mode路线

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刷新页面后,西纳特拉抛出异常,因为URL在AngularJS客户端发生了变化,Sinatra无法找到url路径,这对于Sinatra来说绝对是正确的行为。现在的问题是如何处理Sinatra中的这种类型的异常?我应该定义哪条路线?请注意,我仍然需要Sinatra在其他情况下抛出异常。

回答

1

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

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

谢谢你的回答!对我来说,这是代码的重复,这在将来似乎很难维护。有什么方法可以同时使用它们吗? – hawk

+0

@hawk您可以使用星号代替:id请参阅http://www.sinatrarb.com/intro.html – basarat