AngularJS UI-Router中ui-sref和$state.go之间的区别

47

ui-sref$state.go()之间是否有任何功能上的区别?

ui-sref用于在<a>...</a>标签中,而$state.go('someState')则用于控制器中。

在HTML中,我会使用:

<a ui-sref="currentState.state1">Link</a>

而在函数中,我会使用类似这样的东西:

if(someCondition) {
    $state.go('currentState.state1');
}

那么,这样是否就可以了,还是我需要在$state.go()之后添加一些内容呢?假设当前状态为currentState

2个回答

51

ui-sref$state.go之间没有任何功能性区别。请查看文档。

激活状态

有三种主要的方式来激活一个状态:

  • 调用$state.go()。高级便捷方法。
  • 点击包含ui-sref指令的链接。
  • 导航到与该状态相关联的url.

因此,它们实质上是相同的,正如我们可以在ui-sref指令的代码中看到的那样:

...
element.bind("click", function(e) {
    var button = e.which || e.button;
    if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) {

      var transition = $timeout(function() {
        // HERE we call $state.go inside of ui-sref
        $state.go(ref.state, params, options);
      });

它确实调用了$state.go()

并且如此讨论:ui-sref中所述:

ui-sref='stateName' - 跳转到状态,没有参数。'stateName' 可以是任何有效的绝对或相对状态,遵循与 $state.go() 相同的语法规则。


2
据我所知,有一个区别:导航到 url 将调用 $urlRouterProvider 匹配器,而另外两种方法则不会。 - rcomblen
1
在锚点标签内使用ui-sref指令会导致浏览器在状态栏中显示目标URL,因此最好只在控制器中处理ng-click事件,因为这样可以获得更多的用户反馈。 - Eric Rini

8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接