2013-07-08 31 views
0

我需要驗證表單預輸入。我創建了一個指令來驗證所述輸入,並相應地將'valid_amount'設置爲false或true。

問題是在窗體上,我似乎無法評估'formTransfer.amount.$error.valid_amount',$錯誤不存在。任何想法可能是什麼問題?形式

​​

而且該指令的

部分:

var AMOUNT_REGEXP = /^(\d*\.\d{1,2}|\d+)$/; 

app.directive("amount", function() { 
    return { 
     require: "ngModel", 
     link: function(scope, element, attrs, ngModel) { 
     return ngModel.$parsers.unshift(function(viewValue) { 
      if (AMOUNT_REGEXP.test(viewValue)) { 
      ngModel.$setValidity("valid_amount", true); 
      viewValue; 
      } else { 
      ngModel.$setValidity("valid_amount", false); 
      undefined; 
      } 
      return console.log(ngModel); 
     }); 
     } 
    }; 
    }); 

我與HAML和CoffeeScript的工作,請讓我知道如果某些代碼是沒有意義的澄清或發佈原始代碼。

回答

0

ngModelController.$parsers數組是一組正在應用於用戶輸入的值的函數。

ngModelController.$formatters array是應用於來自模型(來自作用域)的值的函數數組。

您的錯誤最初沒有顯示,因爲您沒有驗證您的字段是否爲初始(模型)值。

所以,你需要調整你的指令,因爲這樣的:

var AMOUNT_REGEXP = /^(\d*\.\d{1,2}|\d+)$/; 

app.directive("amount", function() { 
    return { 
    require: "ngModel", 
    link: function(scope, element, attrs, ngModel) { 

     function validate(value){ 
     if (AMOUNT_REGEXP.test(value)) { 
      ngModel.$setValidity("valid_amount", true); 
      return value; 
     } else { 
      ngModel.$setValidity("valid_amount", false); 
      return undefined; 
     } 
     } 

     ngModel.$parsers.unshift(validate); 
     ngModel.$formatters.unshift(validate); 
    } 
    }; 
}); 

PLUNKER