【问题标题】:How can I associate data with the location stack in UI-Router如何将数据与 UI-Router 中的位置堆栈相关联
【发布时间】:2015-02-24 10:37:07
【问题描述】:

$location 实际上形成了一个堆栈。您可以在其上推送 URL(通过点击链接),您可以从其上弹出 URL(使用后退按钮)。不同寻常的是,当您弹出堆栈顶部的 URL 时,您也会放入“下一个”堆栈,并且使用“前进”按钮,您可以执行相反的操作。链接推送位置堆栈并完全清除“下一个”堆栈。

理想情况下,我希望在 UI-Router 中将少量数据与位置堆栈相关联。

这个想法是,如果用户(例如)打开手风琴,点击一个链接,然后点击返回,我可以将手风琴打开到同一个地方。

请注意,如果域或路径发生更改,则会自动完成;保留所有 Javascript 内存。但是,使用 UI-Router,只有 URL 的锚部分会发生变化,我不知道如何模拟这种行为。

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    一种方法是将查询参数与状态内的操作相关联。

    例如:#/state1url?navOpen=true,当导航打开时。

    另一种方法是监听 $stateChangeStart/$stateChangeSuccess 事件,创建您自己的访问状态堆栈和数据作为服务。

    例如:

    $scope.$on('$stateChangeStart', function(e, fromState, fromParams, toState, toParams) {
        myStackService.addState(fromState.name, {navOpened: $scope.isNavOpened});
      if (myStackService.isBackState(toState.name)) {
         $scope.isNavOpened = myStackService.retrieveStateData(toState.name).navOpened;
      }
    });
    

    显然需要考虑更多的逻辑,但你明白了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-24
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      相关资源
      最近更新 更多