UI Router正在捕获浏览器后退按钮,否则会路由

时间:2018-10-09 18:55:27

标签: angularjs node.js heroku angular-ui-router brunch

我将使用Brunch编译的AngularJS应用程序部署到了Heroku。此应用使用具有一些状态的UI路由器。

我注意到,如果我从AngularJS应用中单击浏览器后退按钮,则无法返回google。在对所有应用程序进行调试之后,问题是相同的:当我按下浏览器后退按钮时,UI Router将URL作为AngularJS路由捕获。由于该路由不存在,因此将执行else函数。

我在Heroku中部署了我的应用程序。我的一些应用程序是:

如果我尝试在localhost中重现此问题,则不会发生。 Heroku可能会进行任何重定向,从而破坏返回导航,但是我想放弃我做错了什么。

router.js主文件:

(function() {
    "use strict";

    angular
        .module("routes")
        .config(config)
        .run(run);

    config.$inject = ["$urlRouterProvider", "$stateProvider"];
    function config($urlRouterProvider, $stateProvider) {
        $urlRouterProvider.otherwise(function($injector, $location) {
            $location.path("/");
        });

        $stateProvider
            .state("layout", {
                url: "",
                abstract: true,
                views: {
                    header: {
                        templateUrl:
                            "app/angular/views/layouts/header/header.html",
                        controller: "HeaderController as header"
                    },
                    footer: {
                        templateUrl:
                            "app/angular/views/layouts/footer/footer.html",
                        controller: "FooterController as footer"
                    }
                },
                resolve: {}
            })
            .state("home", {
                url: "/",
                views: {
                    "main@": {
                        templateUrl: "app/angular/views/home.html",
                        controller: "HomeController as home"
                    }
                },
                parent: "layout",
                resolve: {}
            })
            .state("cookies-policy", {
                url: "/politica-de-cookies",
                views: {
                    "main@": {
                        templateUrl:
                            "app/angular/views/cookies-policy/cookies-policy.html"
                    }
                },
                parent: "layout",
                resolve: {}
            });
    }

    run.$inject = ["$rootScope", "$transitions"];
    function run($rootScope, $transitions) {
        $transitions.onStart({}, onStart);
        function onStart() {
            $rootScope.loading = true;
        }

        $transitions.onSuccess({}, onSuccess);
        function onSuccess(transition) {
            document.body.scrollTop = document.documentElement.scrollTop = 0;

            $rootScope.currentState = transition.to().name;
            $rootScope.loading = false;
        }

        $transitions.onError({}, onError);
        function onError() {}
    }
})();

Node JS路由器:

module.exports = function(app) {    
    var api = express.Router();
    var api_sunshades = express.Router();
    var api_emails = express.Router();

    ...

    // API de la web

    var api_getSunshades = function(req, res) {
        const sunshades = require("./data/sunshades.json");
        return res.json(sunshades);
    };

    var api_getSunshadeByCode = function(req, res) {
        var code = req.params.code;
        const sunshades = require("./data/sunshades.json");

        var sunshade = sunshades.find(function(sunshade) {
            return sunshade.type === code;
        });
        if (sunshade === undefined) {
            return res.status(404).json({});
        } else {
            return res.json(sunshade);
        }
    };

    var api_notFound = function(req, res) {
        return res.status(404).send("Rayosol Toldos API - Method not found");
    };

    // Asociacion de vistas a las rutas
    app.get("/google0b123d2132a7917d.html", vistas_verificacion_dominio_google);

    // Asociacion de metodos de la API a las rutas
    api_sunshades.route("").get(api_getSunshades);
    api_sunshades.route("/:code").get(api_getSunshadeByCode);
    api.use("/sunshades", api_sunshades);

    api.get("/*", api_notFound);

    app.use("/api", api);

    app.get("/sitemap.xml", function(req, res) {
        res.sendFile(path.join(__dirname, "./views", "sitemap.xml"));
    });

    app.set("json spaces", 4);

    app.get("*", function(req, res) {
        return res.sendFile(path.join(__dirname, "../../public", "index.html"));
    });
};

我还注意到,浏览器历史记录包括当前页面(例如cida.herokuapp.com)作为上一页,如图所示。

Browser history image

有人遇到过这个问题吗?非常感谢。

0 个答案:

没有答案