2015-01-07 46 views
0

任何人都可以解釋這段代碼如何工作。在angularjs驗證密碼指令

HTML標記

<input type="password" ng-model="password" class="form-control" placeholder="Password" required> 
<input type="password" ng-model="confirm_password" class="form-control" placeholder="Password" required validate-equals="password"> 

指令代碼

angular.module('app') 
    .directive('validate', function() { 
    return { 
     require: "ngModel", 
     link: function postLink(scope, element, attrs, ngModelCtrl) { 
     function validate(value){ 
      var valid = (value === scope.$eval(attrs.validate)); 
      ngModelCtrl.$setValidtity('equal', valid); 
      return valid ? value : undefined; 
     } 

     ngModelCtrl.$parsers.push(validate); 
     ngModelCtrl.$formatters.push(validate); 

     $scope.$watch(attrs.validate, function(){ 
      ngModelCtrl.$setViewValue(ngModelCtrl.$viewvalue); 
     }) 
     } 
    }; 
    }); 

誰能給我解釋一下下面的questions

下面的代碼在directive中做了什麼?

$scope.watch(attrs.validate, function(){ 
    ngModelCtrl.$setViewValue(ngModelCtrl.$viewvalue); 
}); 

是如何value傳遞給validate()功能?

回答

1

查看ngModelController的文檔。由於這個指令需要ngModel,所以它接收ngModelController作爲鏈接函數的第四個參數。在問候你的其他問題:

  1. $scope.watch(這確實應該$scope.$watch)調用在其上的指令操作元素的驗證屬性設置一個watch。如果validate屬性由於某種原因而改變(例如,它被綁定到一個AngularJS表達式的值發生了變化),那麼作爲第二個參數傳遞的函數將被執行。此函數重置視圖值,該值重新觸發註冊爲解析器的驗證函數。
  2. 根據ngModelController文檔,將視圖值傳遞給第一個解析器函數,並將該函數的結果傳遞給下一個解析器,依此類推。同樣,模型值被傳遞給第一個格式化函數,結果被傳遞給下一個格式化程序。