如何在没有提交按钮的情况下将所有输入设置为$ touched AngularJS

YL2015

我有一个指令,可根据其$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 = $('<i class="fa"></i>');
            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代码的一部分:

<form role="form" name="createProjectForm">
    <label>
        Name Your Project
    </label>
    <div>
        <input type="text" name="project.name"
               ng-model="project.name" required="required" class="form control" input-validation/>
    </div>
    <label>
        Name Your Project
    </label>
    <div>
        <input type="text" name="project.title"
               ng-model="project.title" required="required" class="form control" input-validation/>
    </div>
</form>
  • 编辑:

我找到了所需的方法,更轻松,更快捷:

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

然后$watch为这些更改设置子项(输入)

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

您可以遵循类似于以下格式:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ng-touched不起作用-AngularJS

来自分类Dev

如何在没有任何按钮动作的情况下获取Angularjs隐藏字段值?

来自分类Dev

无法将'touched'设置为true

来自分类Dev

如何在没有远程模板的情况下访问客户AngularJS指令中的隔离$ scope

来自分类Dev

如何在没有自定义HTML标签的情况下使用AngularJS?

来自分类Dev

如何在没有JQuery的情况下正确实现无限滚动的AngularJS表?

来自分类Dev

如何在没有语法错误的情况下获取 $object[""0""].projhours 的目录。AngularJS

来自分类Dev

有没有办法重置Angular中的$ touched?

来自分类Dev

在没有$ scope的情况下创建指令AngularJS

来自分类Dev

AngularJs:在没有承诺的情况下取消路由解析

来自分类Dev

如何在没有命名冲突的情况下使用AngularJS构建MVC Web API应用程序

来自分类Dev

angularjs如何在没有onclick的情况下增加ng-repeat中的初始变量值?

来自分类Dev

如何按功能将`linkRef`更新为`touched`状态?

来自分类Dev

如何将UITextView的光标移动到TOUCHED LOCATION?

来自分类Dev

如何在没有输入的情况下提交表格

来自分类Dev

角度ng消息仅在$ touched为true时显示

来自分类Dev

在angularjs中,如果输入有错误,如何在表单提交上设置对输入的关注?

来自分类Dev

如何在没有Jquery的情况下在AngularJS或纯JavaScript中创建签名板?

来自分类Dev

AngularJS-如何在不提交表单的情况下使用ng-click?

来自分类Dev

如何在AngularJS中不带表单的情况下提交单选框值

来自分类Dev

AngularJS:在没有工厂,服务或广播的情况下将数据从控制器传递到控制器?

来自分类Dev

angularjs在不输入任何数据的情况下形成“具有成功”标记

来自分类Dev

使用AngularJS,如何一次将所有表单字段设置为$ dirty?

来自分类Dev

当所有输入都包含数据时,AngularJS提交按钮处于活动状态

来自分类Dev

如何使用提交按钮在angularJS中提交表单的所有详细信息

来自分类Dev

如何在不影响ngModel的情况下在AngularJS中设置输入的值

来自分类Dev

AngularJS-在没有AJAX调用的情况下重用HTML模板代码

来自分类Dev

AngularJS在没有指示的情况下更新其他文件中的变量

来自分类Dev

可以在没有REST API的情况下使用AngularJS吗?

Related 相关文章

  1. 1

    ng-touched不起作用-AngularJS

  2. 2

    如何在没有任何按钮动作的情况下获取Angularjs隐藏字段值?

  3. 3

    无法将'touched'设置为true

  4. 4

    如何在没有远程模板的情况下访问客户AngularJS指令中的隔离$ scope

  5. 5

    如何在没有自定义HTML标签的情况下使用AngularJS?

  6. 6

    如何在没有JQuery的情况下正确实现无限滚动的AngularJS表?

  7. 7

    如何在没有语法错误的情况下获取 $object[""0""].projhours 的目录。AngularJS

  8. 8

    有没有办法重置Angular中的$ touched?

  9. 9

    在没有$ scope的情况下创建指令AngularJS

  10. 10

    AngularJs:在没有承诺的情况下取消路由解析

  11. 11

    如何在没有命名冲突的情况下使用AngularJS构建MVC Web API应用程序

  12. 12

    angularjs如何在没有onclick的情况下增加ng-repeat中的初始变量值?

  13. 13

    如何按功能将`linkRef`更新为`touched`状态?

  14. 14

    如何将UITextView的光标移动到TOUCHED LOCATION?

  15. 15

    如何在没有输入的情况下提交表格

  16. 16

    角度ng消息仅在$ touched为true时显示

  17. 17

    在angularjs中,如果输入有错误,如何在表单提交上设置对输入的关注?

  18. 18

    如何在没有Jquery的情况下在AngularJS或纯JavaScript中创建签名板?

  19. 19

    AngularJS-如何在不提交表单的情况下使用ng-click?

  20. 20

    如何在AngularJS中不带表单的情况下提交单选框值

  21. 21

    AngularJS:在没有工厂,服务或广播的情况下将数据从控制器传递到控制器?

  22. 22

    angularjs在不输入任何数据的情况下形成“具有成功”标记

  23. 23

    使用AngularJS,如何一次将所有表单字段设置为$ dirty?

  24. 24

    当所有输入都包含数据时,AngularJS提交按钮处于活动状态

  25. 25

    如何使用提交按钮在angularJS中提交表单的所有详细信息

  26. 26

    如何在不影响ngModel的情况下在AngularJS中设置输入的值

  27. 27

    AngularJS-在没有AJAX调用的情况下重用HTML模板代码

  28. 28

    AngularJS在没有指示的情况下更新其他文件中的变量

  29. 29

    可以在没有REST API的情况下使用AngularJS吗?

热门标签

归档