Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无哈希或正则表达式的可选单页应用程序路由机制_Javascript_Url_Routes_Url Routing_Single Page Application - Fatal编程技术网

Javascript 无哈希或正则表达式的可选单页应用程序路由机制

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

我正在开发自己的SPA(单页应用程序)堆栈工具。我目前正在考虑路由器机制——我怀疑我是否应该使用基于散列(#)的路由器,或者考虑其他东西:

  • 使用
    window.history
    API-twitter已经有了一些小的SPA助手:为twitter.com()实现pushState-真的不知道为什么其他流行的(React,Angular)框架路由器不使用它并依赖哈希机制

  • 使用哈希实现,但为了提高url映射速度(和实现),仅使用一级嵌套路由+参数,例如:

    • #/posts
    • #/post new/
    • #/post/
    • #/post edit/
    • #/post comments/
  • 等等

    因此,没有复杂的正则表达式,在第一个斜杠之后总是只有一个非常具有描述性的路由slug,在第二个斜杠之后是一个param(或param,如
    ?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="/">