【问题标题】:Angular 1.5 Components with Form and $setPristine带有 Form 和 $setPristine 的 Angular 1.5 组件
【发布时间】:2017-02-10 10:50:42
【问题描述】:

我正在尝试在 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 行后,reset 可以清除表单数据,但不是从角度看它的状态。

关于我缺少什么的任何想法?

【问题讨论】:

    标签: javascript angularjs forms


    【解决方案1】:

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

    【讨论】:

    • 感谢 Lenilson,让我头疼不已。似乎很接近让它工作
    • @Mike 不客气,伙计!请记住,角度就像数学(旨在简化),如果它导致您挠头,您可能过于复杂了。干杯:{D
    猜你喜欢
    • 2016-07-10
    • 2016-10-21
    • 2017-01-24
    • 1970-01-01
    • 2016-05-16
    • 2016-05-25
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多