2015-04-06 27 views
0

我試圖$watch$error$valid控件的值。這是控制:

<form id="myForm" name="myForm"> 
    <input name="myInput" ng-model="myInputMdl" business-validation/> 
</form> 

business-validation是改變控制的有效性自定義指令。我已經嘗試以下方法(使用$valid$error)基於什麼我在AngularJS directive watch validity閱讀:

  1. 這並不因爲$valid上工作myForm.myInput不存在。

    $scope.$watch('myForm.myInput.$valid', function (isValid) { 
        $scope.usefulVariable = step3.CreditCardNumber.$valid; 
    },true); 
    
  2. 這並不因爲validity.valid工作顯然不能觀看。

    $scope.$watch('myForm.myInput.validity.valid', function (isValid) { 
        $scope.usefulVariable = step3.CreditCardNumber.$valid; 
    },true); 
    
  3. 這因爲$scope.myInputMdl不工作是不是看了每一個變化。

    $scope.$watch('$scope.myInputMdl', function (isValid) { 
        $scope.usefulVariable = step3.CreditCardNumber.$valid; 
    },true); 
    

無法在有效期從控制器觀看?

編輯

我並不想編寫或編輯business-validation指令。我想要的是從窗體的控制器到$watch$valid$error

EDIT 2

控制器的代碼是:

app.controller('WizardBusinessActionCtrl', 
    function ($scope, $http, $parse, $filter, wizardBusinessActionService, $timeout) { 
    //controller code 
    } 
); 
+0

第一種方法應該工作:http://plnkr.co/edit/LIJTj7gpz5A0yB917uxh?p=preview。你不需要真正的深入觀察 –

+0

@NewDev你的方法是完美的,但如果我用一個輸入分配這個值,輸入不會被更新。 – JPCF

+0

你指的是哪個輸入? –

回答

0

我看不出有任何理由,你的第一個變型不應該工作。

HTML:

<div ng-app="myApp"> 
    <div data-ng-controller="MainController"> 
     <form name="myForm"> 
      <input name="myInput" ng-model="myInputMdl" business-validation /> 
     </form> 
    </div> 
</div> 

控制器和指令:當myInput有效性的變化,$watch回調將被解僱

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

$valid屬性值會發生變化。

參見例如:http://jsfiddle.net/Lzgts/287/

+0

對不起,我應該已經警告說,問題並不在指令本身,而是在控制器...讓我正確的,請... – JPCF

+0

你能同時提供控制器的代碼? –

+0

已添加。我不知道這個問題是否足夠代碼,但考慮一個最小的工作控制器。 – JPCF

0

嘗試下面的代碼。 Working Plunker

HTML

<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> 

的JavaScript

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

    } 

    }]); 
+0

對不起,我應該已經警告說,問題並不在指令本身,而是在控制器... – JPCF

+0

你想使用'$ valid'驗證來自控制器的任何輸入? –

+0

我想要的是將從$ error或$ valid獲得的輸入的有效性值賦給作用域中的一個變量。 – JPCF