Javascript 无哈希或正则表达式的可选单页应用程序路由机制
我正在开发自己的SPA(单页应用程序)堆栈工具。我目前正在考虑路由器机制——我怀疑我是否应该使用基于散列(#)的路由器,或者考虑其他东西:Javascript 无哈希或正则表达式的可选单页应用程序路由机制,javascript,url,routes,url-routing,single-page-application,Javascript,Url,Routes,Url Routing,Single Page Application,我正在开发自己的SPA(单页应用程序)堆栈工具。我目前正在考虑路由器机制——我怀疑我是否应该使用基于散列(#)的路由器,或者考虑其他东西: 使用window.historyAPI-twitter已经有了一些小的SPA助手:为twitter.com()实现pushState-真的不知道为什么其他流行的(React,Angular)框架路由器不使用它并依赖哈希机制 使用哈希实现,但为了提高url映射速度(和实现),仅使用一级嵌套路由+参数,例如: #/posts #/post new/ #/pos
window.history
API-twitter已经有了一些小的SPA助手:为twitter.com()实现pushState-真的不知道为什么其他流行的(React,Angular)框架路由器不使用它并依赖哈希机制#/posts
#/post new/
#/post/
#/post edit/
#/post comments/
?param1=X¶m2=Y
等)。这种(第二点)方法有任何缺陷吗
编辑:
由于重复回答-不,我不想使用现有的解决方案(angular/react/ember等)-我想自己实现它(我想为自己构建工具,而不是与不适合我的现有API斗争)简短回答 好的前端路由只有两种可能,即使用或默认哈希实现 长答案 您可以从URL中使用并删除
#
,告诉angular使用历史api():
也许你需要在你的
中:
使用$locationProvider.html5模式(true)代码>您实际上告诉angular使用历史api
“我真的不知道为什么其他流行的(React,Angular)框架路由器不使用它并依赖于散列机制?”因为IE9和以前的版本不支持历史api,正如您所看到的
angular应用程序的一个例子是,没有#
所以启用了HTML5模式
,你能使用angular吗?或者你想开发自己的路由吗?但是为了提高url映射速度,有什么理由认为这首先会成为一个问题吗?不,我不想使用angular(我更新了问题)哈希和真实URL之间还有很大的服务器端差异,如果没有“真实”URL,你不能“切换”到历史api,除非你使用一个缓慢的hacky 404处理程序来路由。@paolo.basso99感谢你的解释(特别是关于缺乏IE支持和html5mode
)
angular.module('test', []).
config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
$locationProvider.html5Mode(true);
}]);
<base href="/">