我正在尝试在Angular 1.5的组件中使用表单

我有工作的形式,因为我有模型绑定,可以在提交时获取数据。所以我有90%的工作要做,所缺少的是能够使用$ setPristine正确重置表单。

我尝试了几种方法,第一种方法是将表单传递为reset函数的参数。

form.html

<form name="$ctrl.userForm">
  ...
  <input class="btn btn-default" type="button" ng-click="$ctrl.reset($ctrl.userForm)" value="Reset" />
</form>


form.component.js

ctrl.reset = function(userForm) {
    ctrl.user = {};
    userForm.$setPristine // Cannot read property '$setPristine' of undefined
};


Full code in Plnkr

我还尝试将$ ctrl.userForm声明为空对象$ onInit,但这似乎也不起作用。删除$ setPristine行后,重置将清除表单数据,但从角度角度来看不是状态。

关于我所缺少的任何想法吗?

最佳答案

您可以从plunkr中将整个组件声明为波纹管。

function formController() {
  var ctrl = this;
  ...

  ctrl.reset = function(userForm) {
    ctrl.user = {};
    userForm.$setPristine
  };

  ctrl.reset();
}


错误源自此行ctrl.reset();,您在其中调用该方法而不发送参数userForm。另外,您以错误的方式使用了$setPristine,也不必将表单作为参数传递。

我建议您使用在控制器上声明的表单,如下所示:

angular
  .module('application')
  .component('mkForm', {
    templateUrl: 'form.html',
    controller: formController
  });

function formController() {
  var ctrl = this;
  ctrl.master = {};

  ctrl.update = function(user) {
    ctrl.master = angular.copy(user);
  };

  ctrl.reset = function() {
    ctrl.user = {};
    ctrl.userForm.$setPristine();
  };
}



  注意:您不必调用ctrl.reset();,因为原始状态是默认状态。

关于javascript - 具有Form和$ setPristine的Angular 1.5组件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42157536/

10-12 13:27