Javascript AngularJS输入监视$valid或$error
我正在尝试Javascript AngularJS输入监视$valid或$error,javascript,angularjs,validation,angularjs-scope,Javascript,Angularjs,Validation,Angularjs Scope,我正在尝试$watch控件的$error或$valid值。这是控件: <form id="myForm" name="myForm"> <input name="myInput" ng-model="myInputMdl" business-validation/> </form> 这不起作用,因为有效。显然无法监视有效的 $scope.$watch('myForm.myInput.validity.valid', function (isValid
$watch
控件的$error
或$valid
值。这是控件:
<form id="myForm" name="myForm">
<input name="myInput" ng-model="myInputMdl" business-validation/>
</form>
有效。显然无法监视有效的
$scope.$watch('myForm.myInput.validity.valid', function (isValid) {
$scope.usefulVariable = step3.CreditCardNumber.$valid;
},true);
$scope.myInputMdl
不会在每次更改时都被监视
$scope.$watch('$scope.myInputMdl', function (isValid) {
$scope.usefulVariable = step3.CreditCardNumber.$valid;
},true);
业务验证
指令。我尝试的是从窗体的控制器中查看$watch
$valid
或$error
编辑2
控制器代码为:
app.controller('WizardBusinessActionCtrl',
function ($scope, $http, $parse, $filter, wizardBusinessActionService, $timeout) {
//controller code
}
);
我看不出为什么你的第一个变种不起作用 HTML:
$valid
属性值将在myInput
有效性更改时更改,并且将触发$watch
回调
请参阅示例:尝试下面的代码
HTML
对不起,我应该警告问题不在指令本身,而是在控制器。。。请让我更正一下……补充道。我不知道它是否是问题的代码,但是考虑一个最小的工作控制器。对不起,我应该警告,问题本身不是指令。但在控制器上…是否要使用
$valid
验证来自控制器的任何输入?我想要的是将取自$error
或$valid
的输入的有效值分配给作用域中的变量。第一种方法应该有效:。而且你不需要深入了解true
watch@NewDev您的方法非常有效,但如果我使用输入指定该值,则输入不会得到更新。您指的是哪种输入?
app.controller('WizardBusinessActionCtrl',
function ($scope, $http, $parse, $filter, wizardBusinessActionService, $timeout) {
//controller code
}
);
<div ng-app="myApp">
<div data-ng-controller="MainController">
<form name="myForm">
<input name="myInput" ng-model="myInputMdl" business-validation />
</form>
</div>
</div>
var myApp = angular.module('myApp', []);
myApp.controller('MainController', function ($scope) {
$scope.$watch('myForm.myInput.$valid', function (validity) {
console.log('valid', validity);
});
});
myApp.directive('businessValidation', function () {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, elem, attr, ctrl) {
function validate (input) {
return input === 'hello';
}
ctrl.$parsers.unshift(function (value) {
var valid = validate(value);
ctrl.$setValidity('businessValidation', valid);
return valid ? value : undefined;
});
ctrl.$formatters.unshift(function (value) {
ctrl.$setValidity('businessValidation', validate(value));
return value;
});
}
};
});
<div ng-controller="ExampleController">
<form name="userForm" novalidate >
Name:
<input type="text" name="userName" ng-model="firstName" required />
</form>
<div>{{firstName}}</div>
<input type = 'button' value = 'Submit' ng-click ='validateInput()'/>
</div>
angular.module('getterSetterExample', [])
.controller('ExampleController', ['$scope', function($scope) {
$scope.validateInput = function(){
$scope.$watch($scope.userForm.userName.$valid, function() {
if($scope.userForm.userName.$valid){
alert('Value is True');
}
else{
alert('Value is False');
}
});
}
}]);