【发布时间】:2014-02-02 00:56:41
【问题描述】:
在 AngularJS 中,我看到有时我们使用 $state.transitionTo(),有时我们使用 $state.go()。谁能告诉我它们有何不同以及何时应该使用一个而不是另一个?
【问题讨论】:
标签: javascript angularjs angular-ui-router url-routing angular-ui
在 AngularJS 中,我看到有时我们使用 $state.transitionTo(),有时我们使用 $state.go()。谁能告诉我它们有何不同以及何时应该使用一个而不是另一个?
【问题讨论】:
标签: javascript angularjs angular-ui-router url-routing angular-ui
你指的是AngularUI Router吗?如果是这样,维基specifies the differences:
$state.go(to [, toParams] [, options])
返回一个表示转换状态的 Promise。
转换到新状态的便捷方法。
$state.go在内部调用$state.transitionTo,但会自动将选项设置为{ location: true, inherit: true, relative: $state.$current, notify: true }。这使您可以轻松地使用绝对路径或相对路径,并仅指定您想要更新的参数(同时让未指定的参数从当前状态继承)。
$state.transitionTo(to, toParams [, options])
返回一个表示转换状态的 Promise。
转换到新状态的低级方法。
$state.go()在内部使用transitionTo。在大多数情况下建议使用$state.go()。
【讨论】:
$state.transitionTo 转换到新状态。在大多数情况下,您不必使用它,您可能更喜欢$state.go。
它在options 对象中接受一些参数:
location:如果true 会更新地址栏中的url,如果false 不会。如果是字符串"replace",将更新url并替换最后的历史记录。inherit:如果true会从当前url继承url参数。relative (stateObject, default null):当使用相对路径(例如'^')进行转换时,定义要相对于哪个状态。notify:如果true,将广播$stateChangeStart和$stateChangeSuccess事件。reload:如果 true 将强制转换,即使状态或参数没有改变,也就是重新加载相同的状态。$state.go 是一种快捷方式,它使用默认选项调用$state.transitionTo:
location: true
inherit: true
relative: $state.$current
notify: true
reload: false
因为合成器更简单,所以更方便。您只能使用州名来调用它。
$state.go('home');
【讨论】: