我有以下的html / angular
<input type="email" data-ng-model="myEmailVar" />
{{ myEmailVar }}
现在问题是angular有一个电子邮件的自动验证程序,除非它正确传递,否则不会设置myEmailVar。因此,例如,如果我输入“name”,则不会设置myEmailVar。你可以在这里看到它:http://jsfiddle.net/bFVsW/(输入单词test,然后输入test@test.test)
现在,我想运行自己的验证,但也支持移动版。如果我使用type =“email”,一些移动浏览器会切换键盘布局,以便更容易输入地址(例如@符号)。所以我无法将其切换为type =“text”。我想要做的是覆盖有角度的电子邮件验证器,或者完全关闭它,因为我将处理我自己的验证。这可能吗?
答案 0 :(得分:3)
在HTML5上,您可以使用表单的属性novalidate来禁用浏览器的验证:
<form novalidate>
<input type="email"/>
</form>
或者您可以使用type="text"
答案 1 :(得分:1)
对于仍在寻找答案的任何机构,我发现此堆栈中的答案溢出答案: How to disable angulars type=email validation?
基本上,您可以添加自己的自定义指令来禁用默认的角度验证器。
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];
}
}
});
同一主题中的另一个答案提供了更详细的答案: How to disable angulars type=email validation?
编辑:此解决方案过去对我有用,但当我从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};
}
}
});
答案 2 :(得分:0)
更新:这不起作用......至少不是你喜欢的方式。将ng-non-bindable添加到表单或任何输入会中断ALL绑定。因此,输入中的ng模型将不再起作用。对不起....
ng-non-bindable是这个问题的答案。请在此处查看我的回答:
答案 3 :(得分:-3)
简单解决方案:类型为'text'
的init字段,并通过超时将类型更改为'email'
。在这种情况下,angularjs不会添加电子邮件验证器,您将拥有电子邮件键盘。
<input type="{{type}}" />
$scope.type = 'text';
$timeout(function() {
$scope.type = 'email';
});