我有一个指令,根据它们$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
您可以遵循与此类似的格式:
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