当直接转到URL时,AngularJS路径中的参数路径未在HTML5模式下加载

tys*_*orp 4 angularjs angularjs-routing

我指定了几条路线:

app.config(["$routeProvider", "$locationProvider", function($routeProvider, $locationProvider) {
    $routeProvider.
    when("/", {
        templateUrl: "/ajax/home.html",
        controller: "HomeController"
    }).
    when("/test/:id", {
        templateUrl: "/ajax/test.html",
        controller: "TestController",
        resolve: {
            data: function ($q, $http, $route) {
                var deferred = $q.defer();
                var params = $route.current.params;

                $http({method: "GET", url: "/api/test/" + params.id + ".json"})
                    .success(function(data) {
                        deferred.resolve(data)
                    })
                    .error(function(data){
                        deferred.reject();
                    });

                return deferred.promise;
            }
        }
    });

    $locationProvider.html5Mode(true);

}]);
Run Code Online (Sandbox Code Playgroud)

当另一条路线上有链接时/test/x,它可以正常工作.不在HTML5模式下它也可以正常工作.但是,当您直接导航到/test/xHTML5模式时,路由不会加载,并且没有任何解决方案被执行.

我查看了很多AngularJS文档,仍然无法弄清楚这一点.plz :(

编辑:我做了更多测试,这仅适用于包含斜杠的路线.如果有一个参数(如:id),似乎并不重要.转到/hello(如果定义了该路由)适用于HTML5和非HTML5模式中的所有情况.要像/hello/world始终工作在非HTML5模式,在道路被来自另一路由通过单击链接而改变了HTML5模式下工作.打开时刷新/hello/world,转到地址栏并按Enter或从另一个网站点击指向它的链接会导致它重新加载索引页而不是实际路径.

And*_*ing 5

添加<base href="/" />到该<head>部分是一个修复,具体取决于您遇到的问题.

(这是我的答案,所以我想确保让其他人遇到这个问题更明显)

感谢@ user27766指出它.