当前位置:  开发笔记 > 编程语言 > 正文

如何将所有输入设置为$ touch而不提交按钮AngularJS

如何解决《如何将所有输入设置为$touch而不提交按钮AngularJS》经验,为你挑选了1个好方法。

我有一个指令,根据它们$valid$untouched属性验证表单内的输入 - 如果输入被"触摸",它会检查验证并相应地将字体和边框用红色/绿色着色,如果输入没有被"触及"它赢了什么都不做

我正在使用ngBootBox的自定义对话框,所以我没有type="submit"提交表单的按钮,我正在使用"创建"按钮的回调函数来传递/保存数据.

我的问题是,当我单击"创建"按钮并且表单不是"有效",因为某些字段为空 - 我的输入仍然是"未触及",因此该$watch函数未被调用.有解决方案吗 有没有办法做这样的事情: $scope.createProjectForm.$setTouched(true);这将使该形式的所有子输入获得该值?

我也试过了,它没有用:

angular.forEach($scope.createProjectForm, function(field){
   field.$setTouched(true);
});

这是我的验证指令:

angular.module('mean.theme').directive("inputValidation", function () {
    return {
        restrict: 'EA',
        require: 'ngModel',
        link: function (scope, inputElement, attrs, ngModelCtrl) {
            var $icon = $('');
            inputElement.before($icon);
            scope.$watchGroup([
                function(){
                    return ngModelCtrl.$untouched;
                },
                function(){
                    return ngModelCtrl.$valid;
                }
            ], function(Paramaters){
                console.log(scope);

                if(!Paramaters[0]) {
                    if (Paramaters[1]) {
                        inputElement.switchClass('validation-warning-border','validation-success-border',50)
                        inputElement.prev().switchClass('fa-warning validation-warning-font' , 'fa-check validation-success-font',50);
                    } else {
                        inputElement.switchClass('validation-success-border','validation-warning-border',50)
                        inputElement.prev().switchClass('fa-check validation-success-font','fa-warning validation-warning-font',50)
                    }
                }
            });
        }
    };
});

这是我的控制器代码的一部分:

    $scope.create = function () {
        var options = {
            title: 'Create',
            templateUrl: 'project.html',
            scope: $scope,
            buttons: {
                warning: {
                    label: "Cancel",
                    className: "btn-link",
                    callback: function () {
                    }
                },
                success: {
                    label: "Create",
                    className: "green",
                    callback: function () {
                        if ($scope.createProjectForm.$valid){
                            $scope.createProject(template);
                        } else {
                            $scope.project.createButtonClicked = true;
                            return false;
                        }
                    }
                }
            }
        };
        $ngBootbox.customDialog(options);
    };

这是我的HTML代码的一部分:

编辑:

我找到了我需要的,更简单,更简洁的方法:

可以手动设置: $scope.createProjectForm.$setSubmitted()totrue

然后让$watch这些变化的孩子(输入):

scope.$watchGroup([
            function(){
                return ngModelCtrl.$untouched;
            },
            function(){
                return ngModelCtrl.$valid;
            },
            function(){
                return ngModelCtrl.$$parentForm.$submitted;
            }
        ], function(Paramaters){
         // code here
        }

developthewe.. 9

您可以遵循与此类似的格式:

if ($scope.form.$invalid) {
    angular.forEach($scope.form.$error, function (field) {
        angular.forEach(field, function(errorField){
            errorField.$setTouched();
        });
    });
}

请参阅'$ setTouched':https://docs.angularjs.org/api/ng/type/ngModel.NgModelController



1> developthewe..:

您可以遵循与此类似的格式:

if ($scope.form.$invalid) {
    angular.forEach($scope.form.$error, function (field) {
        angular.forEach(field, function(errorField){
            errorField.$setTouched();
        });
    });
}

请参阅'$ setTouched':https://docs.angularjs.org/api/ng/type/ngModel.NgModelController

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有