2015-03-31 26 views
-1

的名字我已經創建自定義的驗證,並將其粘貼到輸入元素的模型,如:限制校驗器的角

ngModel.$validators.required = function (value) { 
    return !!value; 
} 

而且這是行不通的 - 功能甚至沒有叫。但是將其從required重命名爲alsoRequired - 它被正確調用。

Angular對驗證器的命名有一些限制嗎?

+1

required是angularjs中的默認驗證器。 – sms 2015-03-31 07:17:39

+0

您可以直接使用'ng-required =「表達式」'動態設置所需的屬性' – 2015-03-31 07:19:39

+0

@sms所以我不能覆蓋它?甚至在不使用本地語言的情況下設置另一個具有相同名稱的語言? – hsz 2015-03-31 07:25:56

回答

0

沒有足夠的代碼來了解到底是怎麼回事,但我能猜出你的錯誤是:

ngModel.$validators由判定任何指令集設置它。例如,輸入指令type="email"設置爲$validators.email; ng-required指令集$validators.required,等等。

您可能在自定義指令或<input type="text">上設置了ng-model,該自定義指令本身不會註冊驗證程序。

自定義指令,像你這樣的,可以註冊一個驗證:

link: function(scope, element, attrs, ngModel){ 
    ngModel.$validators.required = function (value) { 
    console.log(value); // this will fire if parsers do not return undefined 
    return !!value; 
    }; 
}) 

如果設置結合ng-model,應該很好地工作:

<input type="email" ng-model="foo" my-dir> 

http://plnkr.co/edit/1oQGRWZ0kWlV6Q7WjvrY?p=preview

要回答你的問題,您的$validators.required函數未被調用的可能原因是因爲您有另一個指令覆蓋es此值 - 例如,ng-required

0

您可以動態設置必填字段,以便您可以使用ng-required="expression"而不是使用驗證程序。這將增加required屬性有條件如果expressiontrue

+0

謝謝,但事實並非如此。我只是問,爲什麼它沒有設置我的驗證器或覆蓋Angular的一個。 – hsz 2015-03-31 07:25:09