在angularjs中,如何访问formController?

时间:2013-11-12 04:40:34

标签: javascript angularjs angularjs-scope

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

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

在下面的代码中,获取“TypeError:无法调用方法'setPristine'的undefined”

的index.html

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

word.js

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

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

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

  // pull record default
  $scope.reset = function() {
    $scope.orig = angular.copy($scope.dflt);
    $scope.data = angular.copy($scope.orig);
    $scope.wordForm.setPristine();
  }

  $scope.reset();
};                          

我知道进入formController的唯一方法是在$scope中设置它。但它还没有,我不知道如何找到它。

1 个答案:

答案 0 :(得分:2)

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

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

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

我意识到这是对你的问题的一个非常直接的答案。真正的解决方案可能不是调用$ scope.reset ......为什么你需要?你的形式不是从原始开始的吗?如果没有,是什么让它不纯净?