【问题标题】:Angular JS: ng-disabled not disabling button after submitAngular JS:ng-disabled 提交后未禁用按钮
【发布时间】:2016-10-30 20:43:02
【问题描述】:

我有如下表格-

 <form class="form-horizontal register-form" name="register" ng-submit="registerUser();" novalidate>
     <div class="form-group">
        <label for="email" class="cols-sm-2 control-label">Your Email</label>

            <div class="input-group">
                <span class="input-group-addon"><i class="fa fa-envelope fa" aria-hidden="true"></i></span>
                <input type="email" class="form-control"  ng-model="user.email"  name="email" id="mail"  placeholder="Enter your Email"  required />
                 <i ng-show="register.email.$dirty && register.email.$invalid && !user.submit" class="error-icon glyphicon glyphicon-remove"></i>
                 <i ng-show="register.email.$valid" class="valid-icon glyphicon glyphicon-ok"></i>
            </div>
         <span class="error" ng-show="register.email.$dirty  && !user.submit && register.email.$invalid">Email field is required.</span>
           <span class="error" ng-show="register.email.$dirty && register.email.$error.email && register.email.$invalid">Email you entered is invalid.</span>
    </div>
    <div class="form-group">
        <label for="password" class="cols-sm-2 control-label">Password</label>

            <div class="input-group">
                <span class="input-group-addon"><i class="fa fa-lock fa-lg" aria-hidden="true"></i></span>
                <input type="password" class="form-control" ng-model="user.login_password" name="login_password" id="login_password"  placeholder="Enter your Password" required />
                 <i ng-show="register.login_password.$dirty && register.login_password.$invalid && !user.submit" class="error-icon glyphicon glyphicon-remove" ></i>
                 <i ng-show="register.login_password.$valid" class="valid-icon glyphicon glyphicon-ok"></i>
            </div>
            <span class="error" ng-show="register.login_password.$dirty && register.login_password.$error.required && !user.submit">Password field is required.</span>

    </div>

    <div class="form-group">
        <label for="confirm" class="cols-sm-2 control-label">Confirm Password</label>

            <div class="input-group">
                <span class="input-group-addon"><i class="fa fa-lock fa-lg" aria-hidden="true"></i></span>
                <input type="password"  ng-model="user.confirm_password" class="form-control" name="confirm_password" id="confirm_password"  placeholder="Confirm your Password" required />
                <i ng-show="user.login_password !== user.confirm_password" class="error-icon glyphicon glyphicon-remove"></i>
                 <i ng-show="register.confirm_password.$valid && user.login_password == user.confirm_password" class="valid-icon glyphicon glyphicon-ok"></i>
            </div>
            <span class="error" ng-show="register.confirm_password.$dirty && register.confirm_password.$error.required && !user.submit">Confirm password field is required.</span>
            <span class="error" ng-show="register.confirm_password.$dirty && user.login_password !== user.confirm_password">Confirm password does not match.</span>
    </div>

    <div class="form-group ">
     {{register.$invalid }} {{  disableButton}}  {{register.$invalid ==  disableButton}}
         <button type="submit" class="btn btn-primary login-button"  ng-disabled="register.$invalid"  id="button-register" data-loading-text="<i class='fa fa-circle-o-notch fa-spin'></i> Registering..."><i class="fa fa-key" aria-hidden="true"></i> Register</button>

    </div>
</form>

这是我的控制器-

 $scope.registerUser = function() {  
        $scope.user.created_at =  Math.round((new Date()).getTime() / 1000);
        $scope.user.updated_at =  Math.round((new Date()).getTime() / 1000);
        $scope.user.action =  'add';
        $("#button-register").button('loading');
         $http({
            method: 'POST',
            url: 'api/user.php/users/', 
             data: $scope.user ,
            headers: {'Content-Type': 'application/x-www-form-urlencoded'}

        })
        .success(function(data, status, headers, config) { 
            $("#button-register").button('reset');

            $scope.successMsg = 'Congratulation! you are registered successfully.';
            $scope.user={};
            $scope.user.submit=true;
            $scope.disableButton=true;
        })



     } // End of register function

一切正常,但是一旦我提交表单并清除输入字段,提交按钮就会启用。我尝试在提交后打印 {{register.$invalid }} 的值,这是真的(理想情况下,如果它是真的按钮应该被禁用)。但仍然启用该按钮。有人能指出我哪里做错了吗?

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    我认为这与这条线有关:

    $("#button-register").button('reset');
    

    也许,它正在将提交更改为一个带有重置类型的全新按钮。因此执行该语句后会有 ng-disabled 标记。尝试删除此语句并查看禁用是否在没有它的情况下工作。

    它也是一个 jquery,当它与 angularjs 结合时总是会产生问题。如果是这种情况,请尝试将其放入

     $scope.$apply(function(){
     $("#button-register").button('reset');
     }
    

    【讨论】:

    • 你是对的@Neel。这段代码是罪魁祸首。 $("#button-register").button('reset');但我不明白如何应用你的代码我的意思是下面的部分 - $scope.$apply(function(){ $("#button-register").button('reset'); } 我在 .success 块中添加如下所示,但它给出错误。.success(function(data, status, headers, config) { $scope.successMsg = '恭喜!你注册成功。'; $scope.user={}; $scope.user.submit =true; $scope.$apply(function(){ $("#button-register").button('reset'); }); })
    • 按原样应用它。只需删除您的 $("#button-register").button('reset') 语句并粘贴我编写的代码代替它。希望它应该工作。
    • 我做到了,但没有运气
    • 哦,好吧,你能按 f12 并检查它是否在说 $digest 已经在进行类似的事情。如果是这样,那么我想你必须找到一些方法来做那个重置的事情使用 angular js 而不是 jquery。有办法解决它,但它的情况,我不知道你的情况是什么导致了摘要问题。
    • 控制台显示类似 - 错误:[$rootScope:inprog] errors.angularjs.org/1.2.12/$rootScope/inprog?p0=%24digest
    猜你喜欢
    • 1970-01-01
    • 2018-07-10
    • 2023-03-16
    • 1970-01-01
    • 2016-04-14
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多