带有Form和$ setPristine的Angular 1.5组件

时间:2017-02-10 10:50:43

标签: javascript angularjs forms

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

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

我尝试过几种方法,第一种方法是将形式作为重置函数的参数传递。

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行后,重置可以清除表单数据,但不会从角度透视状态。

关于我失踪的想法?

1 个答案:

答案 0 :(得分:3)

从你的傻瓜那里你可以宣告整个组件。

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();,因为原始状态是默认状态。