AngularJS没有在按钮点击时调用函数

时间:2014-09-17 13:39:12

标签: angularjs angular-ui-router

我正在使用AngularJD将数据插入到mongoose db中。我的索引文件有一个div:

<div id="links" ng-controller="loginController">
    <a ui-sref="login">Login</a>
    <a ui-sref="register">Register</a>
</div>

我使用路由重定向到此页面。在我的注册页面上,我试图在按钮的点击事件上调用一个函数:

<form ng-app="login" name="myForm" ng-submit="addNew()" novalidate>
   <p>
      <input type="submit"
          ng-disabled="myForm.lname.$dirty && myForm.lname.$invalid ||
          myForm.fname.$dirty && myForm.fname.$invalid ||
          myForm.mail.$dirty && myForm.mail.$invalid ||
          myForm.pwd.$dirty && myForm.pwd.$invalid ||
          myForm.cpwd.$dirty && myForm.cpwd.$invalid">
    </p>
</form>

这是我的app.js文件:

function loginController($scope)
{
    console.log('inside');
    $scope.addNew = function()
    {
        console.log('adding new entry');
        var newuser = {
            username: $scope.NewUname,
            firstname: $scope.fName,
            lastname: $scope.lName,
            email: $scope.mail,
            $password: $scope.pwd
        }

    }
}

当我调试时,它会记录“内部”而不是“添加新条目”。

1 个答案:

答案 0 :(得分:2)

您的问题是您在ng-app路由模板中的表单上创建了register.html。使用ng-app="login"建立应用的元素应包含其他所有内容。因此,通过loginController实例化的ng-controller="loginController"实际上并未创建,因为它位于角度应用程序之外。

修改

我刚注意到您说“内部”已记录,这实际上意味着loginController 正在实例化。我猜你在ng-app div周围的其他一些包含上下文中建立了另一个links。但是,我仍然认为您的问题是您在ng-app中的表单上创建了新的register.html。我很确定你不能将角度应用程序嵌套在另一个应用程序中。最好的情况是,这会中断表单中的loginController上下文(它可能比这更糟糕/更糟)。无论如何,我认为ng-app声明是你的问题。