【问题标题】:Angularjs, remove # from url in IEAngularjs,从 IE 中的 url 中删除 #
【发布时间】:2013-08-20 10:04:29
【问题描述】:

我有以下问题。在客户端,我有角度路由,类似这样的:

...
$locationProvider.html5Mode(true);
    $routeProvider.
        when('/item/:item_id', { reloadOnSearch: false, templateUrl: '/views/main/partials/_item.html', controller: ItemCtrl }).
        otherwise({redirectTo: '/login'}); // Default
...

以及PHP服务器端的一些路由

$req=$_SERVER['REQUEST_URI'];
if(strpos($req,'/login') > -1){
    include __DIR__.'/../views/login/index.php';
} else if(strpos($req,'/item/') > -1) {
    include __DIR__.'/../views/item/index.php';
else {
    include __DIR__.'/../views/login/index.php';
}

除了 IE 外都很好用,因为在 IE 上执行客户端路由时,url 会从这个改变

myapp/item/123

这样的事情

myapp/#/item/123

当服务器端在客户端路由后收到这种请求url时,哈希标记后的所有数据都消失了,我无法区分应该使用哪个路由。我可以从 url 中删除 #,或者做其他事情来让 IE 和服务器端和平相处吗?我试图解决它失败了。谢谢

【问题讨论】:

    标签: php javascript angularjs angularjs-routing


    【解决方案1】:

    您的 IE 版本不支持HTML5 History API。要发送哈希,您应该做一些额外的工作,例如在 $routeChangeStart 上执行额外的 ajax 请求。

    【讨论】:

    • Event $stateChangeStart 在这种情况下不起作用,但感谢您的提示,我使用了 $routeChangeSuccess 或 $routeChangeStart,它有助于解决问题。 Ajax 请求没有帮助,但我使用查询参数进行重定向并在服务器端解析这些参数。这有点难看,也许有人会提出更好的建议
    • 啊...对于错误的事件名称,我很抱歉,$stateChangeSuccess 在使用 ui-router 时可用,而不是纯 AngularJS。
    猜你喜欢
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    相关资源
    最近更新 更多