如果我有一个<inputtype="email">,并且用户输入了一个国际化域名,则Angular_(编辑:除了不是Angular的错,会_自动将值转换为punycode,这是一个不错的功能,但如果值将显示回给他们。例如
<inputtype="email">
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>
事实证明,这不是那个角的这样做,它的浏览器(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也不要这样做。