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');
           }
          });
    
        }
    
      }]);