Angularjs TypeError:无法读取属性'$原始的';未定义的

Angularjs TypeError:无法读取属性'$原始的';未定义的,angularjs,Angularjs,我得到错误TypeError:无法读取以下代码中未定义的属性“$setPristine”,我尝试执行inputCtrl.inputForm.$setPristine() inputForm.js (function(){ var inputForm = angular.module('input-form', [ ]); inputForm.directive('inputForm', function(){ return { restr

我得到错误
TypeError:无法读取以下代码中未定义的属性“$setPristine”
,我尝试执行
inputCtrl.inputForm.$setPristine()

inputForm.js

(function(){
    var inputForm = angular.module('input-form', [ ]);

    inputForm.directive('inputForm', function(){
        return {
            restrict: 'E',
            templateUrl: 'input-form.html',
            scope: {data: "="},
            controllerAs: 'inputCtrl',
            bindToController: true,
            controller: ['$log', '$scope', function($log, $scope){
              var inputCtrl = this;
              inputCtrl.inputValues = millennialsDefault;

              inputCtrl.emitData = function() {
                inputCtrl.data =  inputCtrl.inputValues.topic1Data;

                $log.debug("Emitting '" + 
                        inputCtrl.inputValues.topic1Name + "' to '" + 
                        inputCtrl.inputValues.topic2Name + "'");
              };

              inputCtrl.swapInput = function(){
                  var swappedInputValues = {
                          topic1Name: inputCtrl.inputValues.topic2Name,
                          topic1Total: inputCtrl.inputValues.topic2Total,
                          topic1Data: inputCtrl.inputValues.topic2Data,
                          topic2Name: inputCtrl.inputValues.topic1Name,
                          topic2Total: inputCtrl.inputValues.topic1Total,
                          topic2Data: inputCtrl.inputValues.topic1Data,
                  };

                  inputCtrl.inputValues = swappedInputValues;
              };

              inputCtrl.clearInput = function(){
                  inputCtrl.inputValues = 
                  {
                          topic1Name: "",
                          topic1Total: undefined,
                          topic1Data: "",
                          topic2Name: "",
                          topic2Total: undefined,
                          topic2Data: "",
                  };
                  inputCtrl.inputForm.$setPristine(); // TypeError: Cannot read property '$setPristine' of undefined

我做错了什么?

显然,解决方案是更改
inputCtrl.inputForm.$setPristine()
$scope.inputForm.$setPristine()

以下是一些参考资料:


如果您喜欢使用
this
并避免引用
$scope
,那么这可能是一个解决方案:

检查是否有任何打开的函数调用,这些调用在表单创建之前呈现页面,最终可能会导致“$setPristine is undefined”

例如,在控制器中

    $scope.reset= function(form){
        form.$setPristine();
    };
   $scope.reset();
如果有这样的错误,你可以看到,
在加载自身时,它将与$setPristine()接合

虽然这确实可能发生,但我认为这并不适用于本问题中的情况。此外,这一问题在一年多前被张贴出来,然后由海报自己回答,因此他们不太可能仍在寻找可行的答案。