2015-09-03 3 views
0

Я получаю сообщение об ошибке Не могу прочитать свойство $ setPristine 'undefined при попытке сбросить форму.

Мой контроллер:

formApp.controller('FormController', ['$scope', 
    function ($scope) { 

     $scope.options = ["Opt1", "Opt2", "Opt3", "Other"]; 
     $scope.formData = { 
      selectedOption: null, 
      firstName: "", 
      lastName: "", 
      email: "", 
      phone: "", 
      fax: "", 
      comments: "" 
     }; 

     var origData = angular.copy($scope.formData); 


     $scope.submit = function() { 
      // submit code goes here 
     }; 

     $scope.reset = function() { 
      $scope.formData = angular.copy(origData); 

       // $scope.financeForm.$setUntouched(); 
       $scope.financeForm.$setPristine(); 


     }; 

     $scope.reset(); 

    } 
]); 

Мой HTML (я раздели большинство полей, чтобы сохранить это минимальное):

<form id="financeForm" name="financeForm" ng-submit="financeForm.$valid && submit()" novalidate> 
    <md-content layout-padding class="autoScroll"> 
     <md-input-container flex md-is-error="financeForm.selectedOption.$invalid && (financeForm.$submitted || financeForm.selectedOption.$dirty)"> 
      <md-select required placeholder="Nature of your Enquiry" ng-model="formData.selectedOption" name="selectedOption" id="selectedOption"> 
       <md-option ng-repeat="opt in options" value="{{opt}}">{{opt}}</md-option> 
      </md-select> 
      <div ng-messages="financeForm.selectedOption.$error" ng-if="financeForm.$submitted || financeForm.selectedOption.$touched"> 
       <div ng-message="required">Please your enquiry option.</div> 
      </div> 
     </md-input-container> 

     <md-input-container> 
      <label>Comments</label> 
      <textarea ng-model="formData.comments" columns="1" md-maxlength="500"></textarea> 
     </md-input-container> 
    </md-content> 

    <md-button class="md-raised" ng-click="reset();">RESET</md-button> 
    <md-button class="md-raised md-primary">SUBMIT</md-button> 
</form> 

Я не понимаю, что я делаю неправильно. Кто-то может помочь?

+0

$ setPristine не должны быть добавлены в качестве услуги для вашей функции в верхней части. Так же, как область –

+0

, 'financeForm' не привязана к области вашего контроллера при вызове' $ scope.reset() ', она привязана только после инициализации контроллера AFAIK. Нужно ли вызывать '$ scope.reset()' когда ваш контроллер инициализируется? Когда вы нажимаете кнопку сброса, вы не должны получать эту ошибку, или вы? – user2718281

ответ

1

$ setPristine не определенно, потому что вам нужно, чтобы добавить его в качестве услуги для вашей функции в верхних

function ($scope,$setPristine){... 

Это позволит функции знает, что вы имеете в виду $ setPristine

Также угловая JS $ setPristine работает только в angularjs 1.1. * поэтому проверьте свою версию.

0

проверить любые вызовы открытых функций, которые отрисовывают страницу до создания формы, которая может закончиться в «$ setPristine is undefined» С помощью этого кода вы можете сбросить $ dirty, $ name, $ untouched, $ нетронутой, $ valid и т. д. ... в исходное булево состояние. в HTML код

<md-button ng-click="reset(ExampleForm)">Cancel</md-button> 
<md-button type="submit" ng-disabled="ExampleForm.$invalid || !ExampleForm.$dirty">Save</md-button> 

В контроллере

$scope.reset = function(formName){ 
     formName.$setPristine(); 
    }; 
Смежные вопросы