javascript - 管理 ui-router 状态历史

标签 javascript angularjs angular-ui-router single-page-application

在我的单页应用程序中,我需要保留状态历史记录以便更轻松地在状态之间来回导航。我有自己的前进和后退按钮,我在我的页面上使用这些按钮,而不是通过浏览器的按钮。

这是我的以下代码,它使用我创建的服务将状态存储在数组中。

$rootScope.$on('$stateChangeStart', function (event, toState, toParams) {
    StateMgmtService.add(toState, toParams);
});

在服务中,我有以下效果:

var history = [];

    return {
        previous: function () {
            if (history && history.length > 0) {
                return history[history.length - 1];
            }
        },
        add: function (state, params) {
            var historyItem = {
                state: state,
                parameters: params
            };

            history.push(historyItem);
        }
    };

问题是,每当我回到之前的状态时,都会触发 stateChangeStart,这基本上会污染我的历史记录。考虑以下示例:

  • 从状态 a 到 b - b 被添加到历史记录中
  • b 到 c - c 被添加
  • c 返回 b - b 再次被添加

这导致从 b 到 c 再到 b 再到 c 的无休止循环...所以我基本上需要不允许将先前的项目添加到历史记录中或者以某种方式知道它会回到历史记录中,但是stateChangeStart 不允许这样的任何区分。

帮助!

最佳答案

在服务中,我最后添加了一个 goBack 方法,当想要遍历历史时调用该方法。此函数设置一个标志,指示在历史中向后移动。然后当 stateChangeStart 事件被触发并添加到数组中时,服务知道它是一个不需要添加的项目,重置标志,并从中返回。到目前为止效果很好。

关于javascript - 管理 ui-router 状态历史,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37286744/

相关文章:

AngularJS : Multiple calls to a service function returning separate promises

angularjs - 带有 spring-boot 和 angularjs 的 CORS 不起作用

javascript - Md-file-input 不会 append 到 AngularJS 中的 formData 中

javascript - 我想使用 Angular JS 重定向到另一个页面

javascript - 将 javascript 对象转换为 URL 参数

javascript - 使用 Slidetoggle 时如何在各个跨度的类之间切换?

javascript - Onclick 删除附加的 Div - JQuery

javascript - Slick.js:获取当前和全部幻灯片(即 3/5)

javascript - 为什么 AngularJS 从搜索栏中删除我的部分 URL

angular - Ionic 4 - Angular 路由器