Angular ng-model 在编辑时被设置为未定义

Angular ng-model is being set to undefined on edit

我正在创建一个模态对话框并尝试在对话框关闭时读回字段,但是在编辑输入时,输入字段的 ng-model 被设置为未定义。对于 Plunk,如果单击对话框按钮然后在不修改文本字段的情况下按确定,它将显示 "blah"。但是如果你修改了文本输入,那么什么也不会显示。

对话框模板是:

  <script type="text/ng-template" id="simpleModal.html">
    <div class="modal-header">
      <h3 class="modal-title">Simple Modal</h3>
    </div>
    <div class="modal-body">
      <div class="form-group">
        <label for="emailInput">Email</label>
        <input id="emailInput" type="email" class="form-control" ng-model="user.email">
      </div>
    </div>
    <div class="modal-footer">
      <button class="btn" type="button" ng-click="ok()">Ok</button>
    </div>
  </script>

模态对话框的控制器:

app.controller('SimpleModalController', function($scope, $uibModalInstance, $log) {

  $scope.user = {
    email: "blah"
  };

  $scope.ok = function() {
    $log.debug('simpleModal ok called ' + $scope.user.email);
    $uibModalInstance.close($scope.user.email);
  };

});

我看到了对 的引用,但我更改了我的代码以反映这一点,但它没有解决问题。

您已在模态

的输入字段中声明了输入type="email"
<input id="emailInput" type="email" class="form-control" ng-model="user.email">

如果数据是根据email传值的。喜欢 a@b.com

您可以检查数据是否有有效的电子邮件

HTML

<form name="myForm">
  <input type="email" name="myEmail" model="myEmail" />
  <span>Valid Email {{myForm.myInput.$valid}}
</form>

PLUNKR

如果您想传递任何字符串,则必须将其设为 type="text"

它被设置为未定义的原因是因为您将电子邮件地址输入为 type=email。如果您在该字段中输入除有效电子邮件地址以外的任何内容,user.email 将被设置为未定义。

我只是 运行 你的 plunker 并输入了一个有效的电子邮件地址,可以看到它已正确设置。在这种情况下,您应该在允许提交之前验证其格式正确的电子邮件地址。