直接转到 URL 时,AngularJS 路径中带有参数的路由不会在 HTML5 模式下加载

2024-04-24

我指定了几条路线:

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);

}]);

当另一条路线上有一个链接通向/test/x,效果很好。当不在 HTML5 模式下时它也可以正常工作。但是,当您直接导航到/test/x在 HTML5 模式下,路由不会加载,并且解析中的任何内容都不会执行。

我已经浏览了很多 AngularJS 文档,但仍然无法弄清楚这一点。请:(

编辑:我已经做了更多测试,这仅适用于其中有斜杠的路线。是否有参数似乎并不重要(例如:id)是否在其中。即将/hello(如果定义了该路由)适用于 HTML5 和非 HTML5 模式下的所有情况。去类似的事情/hello/world始终在非 HTML5 模式下工作,并且当通过单击链接从另一个路由更改路由时,在 HTML5 模式下工作。开启时清爽/hello/world,转到地址栏并按 Enter 键或单击从另一个网站指向它的链接会导致它重新加载索引页面,但不会重新加载实际路线。


Adding <base href="/" /> to the <head>部分是修复,具体取决于您遇到的问题。

(这就是我的答案,所以我想确保对于遇到此问题的其他人来说更加明显)

感谢@user27766 指出这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

直接转到 URL 时,AngularJS 路径中带有参数的路由不会在 HTML5 模式下加载 的相关文章

随机推荐