TypeError:无法读取未定义的属性'$ setPristine'

时间:2015-04-13 17:15:29

标签: angularjs

我在以下代码中收到错误TypeError: Cannot read property '$setPristine' of undefined,我尝试执行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

我做错了什么?

2 个答案:

答案 0 :(得分:1)

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

以下是一些参考资料:

如果您希望使用this并避免引用$scope,那么这可能是一个解决方案:http://www.technofattie.com/2014/07/01/using-angular-forms-with-controller-as-syntax.html

答案 1 :(得分:0)

检查在创建表单之前呈现页面的任何打开函数调用,这可能最终导致“$ setPristine未定义”

例如在你的控制器中

    $scope.reset= function(form){
        form.$setPristine();
    };
   $scope.reset();

如果有这样的东西,你可以看到错误, 在加载自身时,它将使用$ setPristine();