3

我有一个使用前端和后端(使用 Express.js)输入验证的 AngularJS 构建的注册表单。每当用户输入无效的电子邮件地址时,例如qwidjq&/%,我想显示一条错误消息并将表单发送回用户。电子邮件输入字段应包含无效电子邮件作为值。

问题是我无法input(type="email")使用无效的电子邮件值初始化字段。只input(type="text")工作。这是一个例子

任何想法如何解决这个限制?我不想使用input(type="text")自定义指令。我想保留它,input(type="email")因为它会更改移动设备上的键盘布局。

提前致谢!

4

4 回答 4

0

也许在输入元素的旁边显示错误的文本,例如

<input type="email" /><span id="emailerror">qidjq&/% is not a valid address</span>
于 2013-08-13T19:50:39.430 回答
0

You can initialise your input by initialising your model with data.

Example: http://plnkr.co/edit/TUJ6lv?p=preview

于 2013-08-13T20:27:10.080 回答
0

如果我很愚蠢,请原谅我,但您不能在输入无效时禁用表单上的按钮。或者,在您对 ajax 请求做出积极响应之前,不要离开表单。如果您收到否定响应,则显示错误消息。数据仍将保留在表单中。我对 Express.js 不熟悉,所以这可能会迫使您刷新表单。我认为使用像 Angular 这样的框架的全部意义在于让你完全控制 UI。

于 2014-06-23T14:07:03.127 回答
0

不幸的是,初始化模型以显示无效数据需要修补 AngularJS。事实上,如果您使用无效数据初始化任何经过验证的字段,它将显示为空白。

这是导致电子邮件输入在没有有效电子邮件的情况下显示空白的代码:

https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js (第622行)

  var emailValidator = function(value) {
    if (ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value)) {
      ctrl.$setValidity('email', true);
      return value;
    } else {
      ctrl.$setValidity('email', false);
      return undefined;
    }
  };
于 2013-12-06T11:38:29.850 回答