[英]Turn off email validation
我有以下的html / angular
<input type="email" data-ng-model="myEmailVar" />
{{ myEmailVar }}
現在的問題是,Angular有一個自動驗證器,用於電子郵件,除非正確通過,否則不會設置myEmailVar。 因此,例如,如果我輸入“名稱”,則不會設置myEmailVar。 您可以在這里看到它: http : //jsfiddle.net/bFVsW/ (輸入單詞test,然后輸入test@test.test)
現在,我想運行自己的驗證,但也支持移動設備。 如果我使用type =“ email”,則某些移動瀏覽器會切換鍵盤布局以簡化地址輸入(例如@符號)。 所以我不能將其切換為type =“ text”。 我想做的是覆蓋有角度的電子郵件驗證程序,或者完全關閉它,因為我將處理自己的驗證。 那可能嗎?
在HTML5上,您可以使用表單的屬性novalidate禁用瀏覽器的驗證:
<form novalidate>
<input type="email"/>
</form>
或者您可以使用type="text"
對於仍在尋找答案的任何機構,我在此堆棧溢出答案中找到了答案: 如何禁用angulars type = email驗證?
本質上,您可以添加自己的自定義指令,以禁用默認的角度驗證器。
angular.module('app').directive('disableValidators', function() {
return {
require: 'ngModel',
link: function(scope, elm, attrs, ctrl){
var validator = function(value){
return value;
};
// replace other validators with our own
ctrl.$parsers = [validator];
ctrl.$formatters = [validator];
}
}
});
同一線程中的另一個答案給出了更詳細的答案: 如何禁用angulars type = email驗證?
編輯:此解決方案過去對我有用,但是當我從angular 1.2.X升級到1.3.X時不再起作用。 但是,它可以進行一些小的調整:
angular.module('app').directive('disableValidators', function() {
return {
require: 'ngModel',
link: function(scope, elm, attrs, ctrl) {
var validator = function(value) {
return value;
};
// replace the email validators
ctrl.$validators = {email: validator};
}
}
});
更新:這是行不通的……至少不能以您想要的方式。 將ng-non-bindable添加到表單或任何輸入會中斷所有綁定。 因此,輸入中的ng-model將不再起作用。 對不起...
ng-non-bindable是此問題的答案。 在這里查看我的答案:
簡單的解決方案:初始化類型為'text'
字段,並通過超時將類型更改為'email'
。 在這種情況下,angularjs將不會添加電子郵件驗證程序,而您將擁有電子郵件鍵盤。
<input type="{{type}}" />
$scope.type = 'text';
$timeout(function() {
$scope.type = 'email';
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.