angularjs 角形提交两次

o0lyfsai  于 2023-08-02  发布在  Angular
关注(0)|答案(3)|浏览(106)

所以我用angular js使用ng-submit和ng-model制作了一个用户注册表单。问题是当用户提交表单时,它的触发器两次。
我四处寻找共同的原因,没有一个符合要求。我还没有声明我的控制器两次,我的提交按钮也没有任何ng-click事件。
这里是表单代码(可能是我遗漏的错误)

<form class="form"  ng-submit="registerUser()">
    <div class="form-group row">
       <label for="user-fname">First Name</label>
       <div class="two-for-one">
          <input type="text" id="user-fname" name="user-fname" class="form-control" placeholder="first name" ng-model="userData.fname">
      </div>
      <label for="user-lname">Last Name</label>
      <div class="two-for-one">
        <input type="text" id="user-lname" name="user-lname" class="form-control" placeholder="last name" ng-model="userData.lname">
      </div>
    </div>
    <label for="email">Email</label>
    <input class="form-control" type="text" id="email" name="email" placeholder="Email" rel="popover" data-content="What’s your email address?" ng-model="userData.email">
     <label for="reg_password">Password</label>
     <input class="form-control" type="password" id="reg_password" name="reg_password" placeholder="Password" rel="popover" data-content="Please choose a password (minimum of 6 characters)" ng-model="userData.pw">
     <label for="reg_password_confirm">Confirm Password</label>
     <input class="form-control" type="password" id="reg_password_confirm" name="reg_password_confirm" placeholder="Confirm Password" rel="popover" data-content="Please confirm your password" ng-model="userData.cpw">
     <label for="mail">Want to be apart of our mailing list?</label>
     <input type="checkbox" id="mail" name="mail" value="1" ng-model="userData.mail">
     <button class="btn btn-success">Next</button>
 </form>

字符串
虽然我不认为这里的js是:

$scope.userData = {
            acc_type: "user",
            mail:false,
        };
        $scope.registerUser = function() {
            loginRegsterService.registerUser($scope.userData).then(function(response){
                console.log(response);
            });
        };


最后一部分是一个使用http发布数据的服务。很标准

this.registerUser = function(data) {
            var req = {
                method: 'POST',
                url: location.protocol + '//' + location.host + '/models/register.php',
                headers: {
                    'Content-Type': 'application/json'
                },
                data: data
            }
            return $http(req).then(function(response) {
                return response.data;
            });
        };


感谢阅读和您的帮助!
哦,我忘了提到,所有这一切都很好,除了它提交了两次:
html除了Angular 指令外都是有效的。

vngu2lb8

vngu2lb81#

如果您创建一个子组件,它有一个表单,并使用EventEmitter向父组件发送submit/search事件,则可能会发生这种情况。然后父组件将同时接收您的事件和本机事件。您应该在子组件中重命名eventEmmiter,例如:

// Child component
@Output() submitForm = new EventEmitter();
@Output() searchSomething = new EventEmitter();

字符串
而不是

@Output() submit = new EventEmitter();
@Output() search = new EventEmitter();

pbossiut

pbossiut2#

也许是因为你的标签没有指定类型属性-它被视为提交intialy?另见此处:https://stackoverflow.com/a/4667996/405623

j8ag8udp

j8ag8udp3#

检查您的API是否与应用程序在同一个域中。
如果API位于webServer上,而您的应用程序位于localhost上,则表单提交两次

相关问题