子状态和粘性状态有什么区别?

what's the difference between child state and sticky state?

我很好地使用了 angular 1.5 状态(嵌套状态、选项卡状态、模态统计)

Ui-router-extras 具有 粘性状态 ,但我看不出与经典 parent/child 状态架构的区别?

sticky 状态的基本示例是我们可以在没有 sticky 的情况下做什么? http://plnkr.co/edit/SCHExh4DYKFd9Kq3UbaA?p=preview

如果您删除 sticky: true,您会得到相同的行为

不,不是真的。 ui-router 所做的实际上是将您的应用程序转换为状态机。状态机的严格定义是 在任何时间点只能激活一个状态

现在这意味着每当你从 stateA 过渡到 stateB 时,stateA 的范围(以及控制器等其他资产)将被销毁,而 stateB 正在实例化。所以从字面上看,您不能同时激活 stateAstateB 的控制器和范围。结论是,在严格的状态机中不允许并行(也称为粘性)状态。

ui-router-extras让你来做吧。您可以同时激活多个状态。

让我们举个例子。

  1. 你先去stateA
  2. stateA,您开始从 100 秒倒数到 0。
  3. 第 57 秒进行到一半时,您转到 stateB 检索一些数据。您在 stateB 上花费了 10 秒。
  4. 你回到stateA

现在,正常 ui-router。当您在第 4 步返回 stateA 时,您的倒计时将从 100 秒重新开始。与粘性状态一样,倒计时从 57-10 = 47 秒开始。

这很重要,因为对于正常的 ui-router,当您转换到 stateB 时,您的 stateA 的范围将被破坏。返回 stateA 将 re-instantiate 一切,因此倒计时再次从 100 开始。如果您使用粘性状态,则范围会保留。

这是从你的 plnkr demo 分叉出来的。尝试注释掉 sticky:true,然后从 tab1 和 tab 2 来回切换,您会看到不同之处。