可以在http://ec2-52-1-22-32.compute-1.amazonaws.com/
查看代码在登录表单中,我通过ng-单击登录表单的按钮来调用AuthController的当前简单login()函数。当我调用此函数时,我在控制台中收到一个我无法解密的错误。在FF中,我得到了一个" args is null
"错误。在Chrome中,错误表示" TypeError: Cannot read property '0' of null
"。不知道如何调试这个?为什么它不起作用?
PS:您可以输入任何用户名或密码。
答案 0 :(得分:5)
login
中的ng-click="login()"
指的是"登录"形式,而不是$scope.login
函数。
这就是你所拥有的:
<div ng-controller="AuthController as auth">
<form name="login">
<button ng-click="login()">login</button>
</form>
</div>
在控制器中你有:
$scope.login = function(){
}
在作用域上发布的表单login
变量隐藏了控制器中定义的login
函数。换句话说,Angular失败,因为它没有调用ng-click="login()"
的函数。
修复方法:
#1 使用ControllerAs语法:
this.login = function(){
}
和
<button ng-click="auth.login()">
或者,#2 - 重命名函数或表单:
<form name="loginForm">
<button ng-click="login()">login</button>
</form>
答案 1 :(得分:0)
在AuthService中,您有一个&#39; /&#39;而不是&#39;而不是&#39; - 那就是开始一个正则表达式模式,并可能弄乱你的应用程序的其余部分:
login: function(data) {
return $http/post('/api/auth/login')
},
可能导致它的一些问题。您正在使用&#34;控制器作为&#34;在您的HTML中,但控制器仍在使用$ scope:
ng-controller="AuthController as auth"
您还在引用对象/函数,就像它们在$ scope上一样...例如ng-click =&#34; login()&#34;应该是ng-click =&#34; auth.login()&#34;。