我正在建立一个带有URL字段的Angular表单,该URL字段可以使用前缀(http://)或不使用前缀进行格式化。使用Angular的默认url验证需要http://,因此我插入了以下正则表达式,该正则表达式接受带或不带前缀:
<input type="text" id="siteAddress" name="siteAddress" ng-model="user.url" ng-pattern="/^(https?:\/\/)?([\dA-Za-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/" required>
这很好用,但是当我设置type =“ url”时,Angular的验证将覆盖我的自定义ng-pattern。该表格仅适用于移动用户,因此type =“ url”很重要,以便他们接收正确的键盘,因此其移动操作系统不会尝试自动更正其输入。
是否可以在不使用Angular的默认验证的情况下使用type =“ url”,还是可以修改Angular的默认验证,使其不接受url前缀?
谢谢!
似乎没有官方的API可以执行此操作,但是您始终可以覆盖默认指令或使用具有更高优先级的指令来更改标准行为。
例如,angular的input
指令从$attributes
对象获取类型,因此您可以删除此属性。
directive('ignoreType', function() {
return {
priority: 500,
compile: function(el, attrs) {
attrs.$set('type',
null, //to delete type from attributes object
false //to preserve type attribute in DOM
);
}
}
});
当然,此解决方案也可能破坏其他与type属性配合使用的指令的行为,因此请谨慎使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句