javascript - AngularJS:使用路由记住复杂 View 的状态/设置

标签 javascript angularjs angularjs-routing

在单页应用程序中,有没有办法来回切换到 AngularJS 路由并以与之前显示的状态相同的状态显示它?

通常这将通过在父作用域中绑定(bind)数据来实现。虽然这对于轻量级 View 来说很容易设置,但对于包含大量图形元素的 View 来说可能会很麻烦。

这是一个例子,记住之前的路由状态可以增强用户体验:在下一页上,想象一下

  • 您站在项目 1 上并选择选项卡 2
  • 然后转到第 2 项
  • 最后切换回项目 1:选项卡 2 不再被选中 :-(

http://angular-route-segment.com/src/example/#/section1/1

在路由之间来回切换时, View 似乎被破坏/构建。

解决方案是将用户界面的状态存储在父作用域中,但它有以下缺陷:

  • 创建一个对象来存储用户界面的所有小细节
  • 创建关于保存和重置 UI 到与之前相同状态的复杂逻辑
  • 在数据模型中存储 UI 状态听起来不像 MVC 风格

使用存储 View 的div的show/hide保存了状态但是没有使用路由,必须手工实现切换业务。我喜欢使用路由,因为 1. 浏览器历史导航(网址中的哈希值)和 2. 易于设置。

不记住 UI 状态就像让 Chrome 在选项卡之间来回切换时重新加载页面:不是很用户友好。

有 Angular 方式吗?

最佳答案

您的 $routeSegment 方法非常有趣。 $routeSegment 服务可以插入 $routeChangeStart 事件以

  • 以某种方式在目前看到的所有路径上保留“子路径历史记录”,可能仅适用于那些明确配置为保持其 UI 状态的路径。在您的路径“/section1/1”示例中,如果选择了选项卡 2,则存储的子路径将为“/Y”。事情变得有趣了,因为可能需要覆盖带有 $routeParams 的动态路径。
  • 通过在事件处理程序中使用 $location.path,使用此历史记录进行重定向。因此,next.originalPath 为“/section1/1”的 $routeChangeStart 事件可能会被重定向到“/section/1/Y”

关于javascript - AngularJS:使用路由记住复杂 View 的状态/设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19494405/

相关文章:

javascript - 对于相同的事件但不同的对象 jquery 有相同的功能

javascript - 在 GOOGLE map API v3 上显示圆圈内的点

javascript - Angularjs - JSON 对象编辑

angular ui路由器状态更改时触发的ios地址栏

javascript - 检查 localStorage 是否在 AngularJS 路由中有值的最简单方法

javascript - 跳出一个 JS 函数调用另一个 JS 函数

javascript - 将值从弹出窗口 ('open' ) 发送到 'popupbeforeposition'

javascript - 单击按钮动态添加 DOM 元素

angularjs - 无法读取AngularJS中未定义的属性 'replace'?

javascript - Angular 路由问题 - ionic header 未在选项卡中更新