通过单击 AngularJS 控制器调用函数时出错?

Error When Calling Function Via ng-click On AngularJS Controller?

代码可以在http://ec2-52-1-22-32.compute-1.amazonaws.com/

查看

在登录表单中,我通过点击登录表单的按钮来调用 AuthController 当前简单的 login() 函数。当我调用此函数时,我在控制台中收到无法破译的错误。在 FF 中,我收到“args is null”错误。在 Chrome 中,错误显示为“TypeError: Cannot read property '0' of null”。不确定如何调试?为什么不起作用?

PS: 您可以输入任何用户名或密码。

在 AuthService 中,您有一个“/”而不是“.”。 - 这是开始一个正则表达式模式,可能会搞乱你应用程序的其余部分:

login: function(data) {
  return $http/post('/api/auth/login')
},

其他一些可能导致它的问题。您在 html 中使用 "controller as",但控制器仍在使用 $scope:

ng-controller="AuthController as auth"

您还在引用 objects/functions,就好像它们在 $scope 上一样...例如 ng-click="login()" 应该是 ng-click="auth.login()"。

ng-click="login()" 中的 login 指的是 "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>