小编典典

防止Angular破坏电子邮件输入

angularjs

如果我有一个<inputtype="email">,并且用户输入了一个国际化域名,则Angular_(编辑:除了不是Angular的错,会_自动将值转换为punycode,这是一个不错的功能,但如果值将显示回给他们。例如

abc@ábc.com

变成

abc@xn--bc-lia.com

当后端需要该域的原始Unicode版本时,它也会引起问题,而Angular应用会发送punycode版本。

我可以使用例如punycode.js将其转换回去,但是有没有一种方法可以在Angular中完成而又不涉及其他库-
要么告诉Angular不要进行编码,要么随后获得原始值?

var myApp = angular.module('myApp',[]);



function thing($scope) {

}


<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<body ng-app="myApp">

<p>Copy this text into the input:</p>

<p>abc@ábc.com</p>

<div ng-controller="thing">

  <input id="inp" type="email" class="form-control" ng-model="addr">

  <p>Model gets: {{addr}}</p>

</div>

</body>

阅读 219

收藏
2020-07-04

共1个答案

小编典典

事实证明,这不是那个角的这样做,它的浏览器(Safari浏览器也_不会_具有相同的行为,没有测试其他浏览器)。

这是不使用Angular时发生的示例-在Chrome中尝试以下操作:

function update() {

  document.getElementById('output').innerText = document.getElementById('inp').value

}


<p>Copy this text into the input:</p>

<p>abc@ábc.com</p>

<div ng-controller="thing">

  <input id="inp" type="email" onchange="update()">

  <p>Browser says: <span id="output"></span></p>

</div>

因此,简短的答案是“否”,没有办法通过Angular停止它-目前似乎也没有办法告诉Chrome也不要这样做。

2020-07-04