Angularjs 如何将数据与UI路由器中的位置堆栈关联

Angularjs 如何将数据与UI路由器中的位置堆栈关联,angularjs,Angularjs,$location实际上是一个堆栈。你可以点击一个链接来推送URL,你可以用后退按钮弹出URL。不同寻常的是,当您弹出堆栈顶部的URL时,您也会将其放入下一个堆栈,使用“前进”按钮,您可以执行相反的操作。链接推送位置堆栈并完全清除下一个堆栈 理想情况下,在UI路由器中,我想做的是将少量数据与位置堆栈相关联 这个想法是,如果用户打开一个手风琴,点击一个链接,然后点击后退,我可以打开手风琴到同一个地方 请注意,如果域或路径发生更改,这将自动完成;所有Javascript内存都被保留。不过,使用UI路

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

理想情况下,在UI路由器中,我想做的是将少量数据与位置堆栈相关联

这个想法是,如果用户打开一个手风琴,点击一个链接,然后点击后退,我可以打开手风琴到同一个地方


请注意,如果域或路径发生更改,这将自动完成;所有Javascript内存都被保留。不过,使用UI路由器,只有URL的锚定部分会更改,我不知道如何模拟这种行为。

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

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

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

例如:

$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;
  }
});
显然有更多的逻辑需要考虑,但你明白了