【问题标题】:Javascript - How to redirect to homepage if back button in clickedJavascript - 如果单击后退按钮,如何重定向到主页
【发布时间】:2018-09-25 23:27:26
【问题描述】:

我一直在研究并寻找不同的解决方案,但似乎找不到适合我需要的解决方案。我有一个 AngularJS 应用程序正在对系统进行一些更改。它有许多 HTML 视图,用于显示更改、在出现问题时推送和删除更改。所以应用程序是这样的:

Page 1:  Login and get user input
Page 2:  Show changes that user is going to commit
Page 3:  Push changes
Page 4:  Show results
They have an option to remove changes if something does no look right.

我正在编写 python 脚本来对系统执行更改并将 Flask 用于 API。

现在我的问题是,如果用户在第 4 页并点击后退按钮,它会返回到“推送更改”页面并实际上开始再次推送相同的更改。有什么办法可以修改它,所以如果在任何页面上用户点击浏览器上的后退按钮,它会将它们发送回主页?

共享代码无济于事,因为我有很多包含大量代码的文件。以下是我的路线和观点的一些概述,可能会让它有点清楚:

app.config(function($routeProvider) {
    $routeProvider
    .when("/", {
        templateUrl : "./views/userForm.htm",
        controller : "inputController"
    })
    .when("/checkChanges", {
        templateUrl : "./views/checkChanges.htm",
        controller : "checkChangesController"
    })
    .when("/pushChanges", {
        templateUrl : "./views/pushChanges.htm",
        controller : "pushChangesController"
    })
    .when("/results", {
        templateUrl : "./views/results.htm",
        controller : "resultsController"
    })
    .when("/remove", {
        templateUrl : "./views/remove.htm",
        controller : "removeController"
    })

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

您可以添加popstate 监听器来处理用户点击后退或前进按钮的事件。

window.addEventListener('popstate', function() {
    $state.go(...); //go to your home state
});

更新:如何重定向到家庭状态

在下一段代码中,您将创建组件主页,设置其 HTML 模板、控制器,然后添加配置以将其映射到 URL '/'。

var home = {
    templateUrl: './templates/home.html',
    controller: 'homeController'
};

angular
    .module('myApp')
    .component('home', home)
    .config(["$stateProvider", function($stateProvider){
        $stateProvider
            .state('home', {
                url: '/',
                component: 'home',
            });
    }]);

然后,在 popstate 事件的事件侦听器中,您将拥有 $state.go('home');

【讨论】:

  • 它会进入每个控制器吗?
  • 不,您只需要运行此代码一次,因此在浏览器中注册了监听器。我已将它添加到我的应用程序的主控制器中,以确保它始终被执行。添加侦听器后,无论您的 AngularJS 应用程序处于何种状态,它都会启动。
  • @Jessus Duran,无法让 state.go 工作,所以我将其替换为 $location.path("/");它确实把我送回了家,但是,当我查看日志时,它也踢了上一页的 API 调用。所以,如果我在“/results”页面上并回击。它会返回首页,但也会触发上一页“/pushChanges”上的 API。
  • 我很容易让$state.go 工作:( 使用 $location 服务有点不同,因为您可以更改 URL 而无需重新加载页面,所以我想这就是您的原因在“/pushChanges”上获得点击:当用户在浏览器中按下返回按钮时,您的应用会转到“/pushChanges”,然后您更改 URL 以使您的应用进入不同的状态。
  • 所以我需要这样的东西:$state.go('/');我想将用户发送到他们按下后退按钮的家中。
【解决方案2】:

试试这个;

 window.addEventListener('popstate', () => { //handler });

【讨论】:

    猜你喜欢
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    相关资源
    最近更新 更多