儿童状态和粘性状态之间的区别是什么?

时间:2017-01-12 14:58:02

标签: angularjs angular-ui-router angular-ui-router-extras

我很好地使用了角度1.5状态(嵌套状态,制表符状态,模态统计数据)

Ui-router-extras有粘性状态,但我没有看到与经典父/子状态架构的区别?

粘性状态的基本示例是我们可以做到的没有粘性的东西吗? http://plnkr.co/edit/SCHExh4DYKFd9Kq3UbaA?p=preview

如果删除sticky: true,则会获得相同的行为

1 个答案:

答案 0 :(得分:3)

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

现在,这意味着当您从stateA转移到stateB时,stateA的范围(以及控制器等其他资产)将被销毁,而{{ 1}}被实例化的。从字面上看,您不能让stateBstateA的控制器和范围同时处于活动状态。结论是,在严格的状态机中不允许并行(也称为粘性)状态。

stateB让你这样做。您可以一次激活多个状态。

让我们举个例子。

  1. 您首先转到ui-router-extras
  2. stateA中,您开始从100秒倒计时到0.
  3. 在第57秒中途,您转到stateA以检索一些数据。你在stateB花了10秒钟。
  4. 您返回stateB
  5. 现在,正常stateA。当您在步骤4返回ui-router时,您的倒计时将从100秒重新开始。与粘性状态一样,你的理论从57-10 = 47秒开始。

    这很重要,因为对于正常的stateA,当您转到ui-router时,您的stateB范围会被销毁。转回stateA将重新实例化一切,因此倒计时从100再次开始。如果使用粘滞状态,则会保留范围。

    以下是plnkr demo与您分道扬..尝试注释掉stateA,然后从标签1和标签2来回查看,您会发现不同之处。