通过ng-click AngularJS控制器调用功能时出错?

时间:2015-02-16 21:51:00

标签: javascript angularjs controller

可以在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:您可以输入任何用户名或密码。

2 个答案:

答案 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;。