我正在构建一个注册表单,该表单将提交用户的输入,然后转移到具有特定于此新用户的模板的登录状态。
据我了解,要做到这一点,我必须在控制器中使用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-sref
和ng-submit
,但它不起作用,ng-submit
被忽略。在这种情况下,最佳做法是什么?
答案 0 :(得分:3)
所有ui-sref
都会生成一个href
属性,其中包含指定状态的网址。
如果您希望使用href
(在这种情况下提交表单)无法实现用户互动的某处,则必须使用$state.go
。
你可以这样看:
ui-sref
:href
属性绑定到元素。$state.go
转换到另一个状态,由您的javascript代码控制答案 1 :(得分:1)
这是一个很好的做法,实际上没有其他任何方法可以做到这一点。如你所说,你不能将ui-sref
和ng-submit
放在一起,这有意义,你将被重定向到新的状态。
通过ng-submit
提交表单绝对是可行的方法,$state.go
只是转换到控制器中其他状态的一种方式。
在某些情况下,您必须转换到控制器中的其他状态,因此混合这两种状态没有任何问题。