在Angular ui-router中混合使用ui-sref和$ state.go进行状态转换

时间:2016-05-18 10:59:58

标签: javascript angularjs angular-ui-router

我正在构建一个注册表单,该表单将提交用户的输入,然后转移到具有特定于此新用户的模板的登录状态。

据我了解,要做到这一点,我必须在控制器中使用html模板中的ng-submit()$state.go()

模板:

<form ng-submit="register(name, password)">
  ...
  <input class="btn btn-success btn-lg btn-block" type="submit" value="Sign Up">
</form>

控制器:

angular.module('myApp').controller('RegisterController',
        ['$scope','userService', function($scope, userService) {
          $scope.register = function(name, passed) {
            userService.register(name, passed);
            $state.go("app.home");
          }
}])

但是,我只需要使用几个地方$state.go(),在大多数情况下,html模板中的ui-sref就足够了。 ui-sref$state.go()的混合是一种好习惯吗?根据ui-router文档,他们基本上做同样的事情。但是由于状态转换散布在两个不同的地方(模板和控制器),感觉就像一个代码味道给我。

我尝试一起使用ui-srefng-submit,但它不起作用,ng-submit被忽略。在这种情况下,最佳做法是什么?

2 个答案:

答案 0 :(得分:3)

所有ui-sref都会生成一个href属性,其中包含指定状态的网址。

如果您希望使用href(在这种情况下提交表单)无法实现用户互动的某处,则必须使用$state.go

你可以这样看:

  • ui-srefhref属性绑定到元素。
  • $state.go转换到另一个状态,由您的javascript代码控制

答案 1 :(得分:1)

这是一个很好的做法,实际上没有其他任何方法可以做到这一点。如你所说,你不能将ui-srefng-submit放在一起,这有意义,你将被重定向到新的状态。

通过ng-submit提交表单绝对是可行的方法,$state.go只是转换到控制器中其他状态的一种方式。

在某些情况下,您必须转换到控制器中的其他状态,因此混合这两种状态没有任何问题。