1

重置表单中的数据时,希望设置form.setPristine(),但formController尚未在 $scope 中注册。

这似乎是一个愚蠢的问题,但我怎样才能找到formController

在下面的代码中,得到“TypeError:无法调用未定义的方法'setPristine'”

索引.html

<ng-form name='wordForm' ng-controller='wordCntl' >
  ...
</ng-form>

word.js

var langMod = angular.module('langMod', []);

langMod.controller('wordCntl', function($scope,$http,$location) {

  // 数据
  $scope.dflt = { wrd_id: '', usr_id: '', ln: '', word: '' };
  $scope.orig = {};
  $scope.data = {};

  // 拉取记录默认
  $scope.reset = 函数() {
    $scope.orig = angular.copy($scope.dflt);
    $scope.data = angular.copy($scope.orig);
    $scope.wordForm.setPristine();
  }

  $scope.reset();
};                          

我知道到达的唯一方法formController是当它被设置在$scope. 但它还没有,我不知道如何找到它。

4

1 回答 1

2

指令控制器在其他指令之间共享。要访问它,请在表单上创建一个自定义指令,它成为链接函数的第四个属性。

在您的自定义指令中,您可以这样做:

//inside custom directive
link: function(scope, element, attrs, controller){
  controller.$setPristine();
} 

我意识到这是对您问题的非常字面的回答。真正的解决方案可能还不是调用 $scope.reset ......你为什么需要这样做?无论如何,您的表格不是从原始状态开始的吗?如果不是,是什么使它不原始?

于 2013-11-12T04:48:09.383 回答