【问题标题】:Reset form fields outside a controller in AngularJs在AngularJs中重置控制器外部的表单字段
【发布时间】:2015-06-11 16:12:48
【问题描述】:

我在重置注册模式表单字段时遇到问题。

例如,当用户单击模态关闭按钮并收到 $http 请求后,我调用了自定义 resetForm 函数。

$scope.resetForm = function () {
            $scope.successMessage = "";
            $scope.message = "";

            $scope.FPEmail = "";
            $scope.forgotForm.$setPristine();
        };

但是引导模式具有通过在模式主体外部单击来关闭的属性。在这种情况下,我无法重置表单。我试图通过将 ng-click 放在打开模式的按钮上来解决它。但是这个按钮位于控制器外部,我不知道如何从控制器外部重置表单。

【问题讨论】:

  • 你现在如何关闭模态?
  • 如果您希望在点击外部后不关闭该模式,然后将此 data-backdrop="static" 添加到 div class="modal fade " data-backdrop="static">
  • 你有一个特定的控制器附在模型上吗?
  • 有两种方法可以关闭它。 1) 通过单击关闭按钮 (X) 和 2) 通过单击模式外部
  • @NuttyProgrammer 在打开模式时重置所有字段,因为您提到有多个退出点,但它只有一个入口点。

标签: javascript angularjs


【解决方案1】:

Angular BootstrapUI $modal 服务调用返回一个具有属性result 的对象,该对象是“当模态关闭时解决的承诺,当模态关闭时被拒绝”。通过在弹出窗口之外单击来关闭模式被视为拒绝此承诺。这意味着在您的情况下,您需要在 promise 的拒绝回调中调用 resetForm。例如:

$modal.open({
    template: 'form.html',
    controller: 'formController'
})
.result.then(function() {
    alert('resolved')
}, function() {
    $scope.resetForm();
});

【讨论】:

    【解决方案2】:

    要在本例中使用范围,您需要在与其相关的 ng-controller 中使用 ng-click 按钮。如果您不能这样做,则另一种方法是使用 JavaScript。

    看看我昨天问的一个问题 :) 如果你使用 angular-UI 可能会有所帮助

    AngularJS $modalInstance - Can i do this in one controller?

    【讨论】:

      【解决方案3】:

      你可以在控制器中使用少量的jQuery代码

      $('#id').val('')

      为我工作..

      【讨论】:

      • 我同意用 JQuery 扩充 AngularJS,但仅在绝对必要时。如果表单中有 20 个字段呢?很可能,让模型绑定发挥其魔力更为可取。
      • 是的,我更喜欢使用 angularjs 绑定。使用 jquery 或 js 将是我最后的选择。
      • 实际上你不能,你不能在控制器之外访问范围变量。或者您可以为用于打开模式的按钮重新分配相同的控制器
      猜你喜欢
      • 2014-07-17
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 2022-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多