Angularjs 什么';子状态和粘滞状态之间的区别是什么?

Angularjs 什么';子状态和粘滞状态之间的区别是什么?,angularjs,angular-ui-router,angular-ui-router-extras,Angularjs,Angular Ui Router,Angular Ui Router Extras,我很好地使用了角度1.5状态(嵌套状态、选项卡状态、模态状态) Ui路由器extras有粘性状态,但我看不出与经典的父/子状态架构有什么区别 粘性状态的一个基本例子是我们可以不用粘性来做什么? 如果删除粘性:true,则会得到相同的行为不,不是真的。实际上,ui路由器将你的应用程序转换成一个状态机。状态机的严格定义是,在任何时间点,只能有一个状态处于活动状态 这意味着,无论何时从stateA过渡到stateB,stateA的范围(以及控制器等其他资产)将被销毁,而stateB的范围将被实例化。

我很好地使用了角度1.5状态(嵌套状态、选项卡状态、模态状态)

Ui路由器extras有粘性状态,但我看不出与经典的父/子状态架构有什么区别

粘性状态的一个基本例子是我们可以不用粘性来做什么?


如果删除粘性:true,则会得到相同的行为

不,不是真的。实际上,
ui路由器
将你的应用程序转换成一个状态机。状态机的严格定义是,在任何时间点,只能有一个状态处于活动状态

这意味着,无论何时从
stateA
过渡到
stateB
stateA
的范围(以及控制器等其他资产)将被销毁,而
stateB
的范围将被实例化。因此,从字面上讲,您不能同时激活
stateA
stateB
的控制器和作用域。结论是,在严格的状态机中不允许存在并行(即粘性)状态

ui路由器附加功能
让我们来做这个。一次可以有多个状态处于活动状态

让我们来看一个示例场景

  • 首先进入
    stateA
  • stateA
    中,您开始从100秒倒计时到0秒
  • 在第57秒进行到一半时,您进入
    stateB
    以检索一些数据。您在
    stateB
    上花费10秒钟
  • 返回到
    stateA
  • 现在,对于普通的
    ui路由器
    。当您在第4步返回到
    状态a
    时,您的倒计时将从100秒开始重新开始。其中,与粘性状态一样,您的下降从57-10=47秒开始

    这一点很重要,因为对于正常的
    ui路由器
    ,当您传输到
    stateB
    时,您的
    stateA
    的作用域将被破坏。返回到
    stateA
    将重新实例化所有内容,因此再次从100开始倒计时。如果您使用的是粘性状态,则会保留作用域

    这是你的叉子。尝试注释出
    sticky:true
    ,然后从选项卡1和选项卡2来回切换,您将看到差异