UI Router ловит кнопку браузера назад, иначе - PullRequest
0 голосов
/ 09 октября 2018

Я развернул приложение AngularJS, скомпилированное с Brunch для Heroku.Это приложение использует UI Router с несколькими состояниями.

Я заметил, что не могу вернуться в Google, если нажимаю кнопку возврата браузера в моем приложении AngularJS.После отладки нескольких приложений во всех из них проблема остается той же: когда я нажимаю кнопку возврата браузера, UI Router перехватывает URL-адрес как маршрут AngularJS.Поскольку маршрут не существует, в противном случае выполняется функция.

Я развертываю свои приложения в Heroku.Вот некоторые из моих приложений:

Если я попытаюсь воспроизвести эту проблему на локальном хосте, этого не произойдет.Возможно, что 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() {}
    }
})();

Узел JS router:

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) в качестве предыдущей страницы, как показано на рисунке.

История браузераimage

Кто-нибудь когда-либо имел эту проблему?Большое вам спасибо.

...