2015-03-16 3 views
1

У меня есть форма, как это -

<form name="myForm" novalidate> 

Есть несколько полей в форме, которую я проверяющего, а затем представившего форму, как это -

<input type="button" ng-click="Save(data)" value="Save"> 

В контроллере я хочу проверить, не является ли форма неправильной, тогда Save() должен показать некоторую ошибку на странице. Для этого я устанавливаю вверх часы, как это -

$scope.$watch('myForm.$valid', function(validity) { 
    if(validity == false) 
     // show errors 
}); 

Но я всегда получаю эту ошибку запустить его -

Cannot read property '$valid' of undefined 

Может кто-нибудь объяснить, почему?

Благодаря

+0

should't, что быть '$ scope.myForm $ valid'.? –

+0

@MariusBancila nope, это подразумевается, когда вы используете метод $ watch. – levi

+0

Зачем вам нужен метод watch over $ valid? вы просто можете проверить форму на отправке. – levi

ответ

2

Вы просто опечатка «Myform» в коде контроллера. Чтобы удалить ошибку, напишите «myform» вместо «myForm».

Однако я ожидаю, что вы хотите, чтобы это было так.

$scope.Save = function(data){ 
    alert($scope.myform.$valid); 
} 

I установка jsfiddle.

+0

Это просто опечатка здесь. Это хорошо в коде. – Sam

+0

Я добавил функцию $ watch в [my jsfiddle] (https://jsfiddle.net/yazaki/cr5n2v2p/3/). Я не вижу ошибки. И все работает нормально. В чем разница между моей скрипкой и кодом? Вы хотите настроить jsfiddle или что-то, что может вызвать ошибку, с которой вы столкнулись? – yazaki

2

В моем случае я обертывал форму в модальном виде, созданном в контроллере, и поэтому получил ту же ошибку. Я установил его:

HTML

<form name="form.editAddress" ng-submit="save()"> 
    <div class="form-group"> 
     <label for="street">Street</label> 
     <input name="street" type="text" class="form-control" id="street" placeholder="Street..." ng-model="Address.Street" required ng-minlength="2" /> 
     <div class="error" ng-show="form.editAddress.street.$invalid"> 
      <!-- errors... --> 
     </div> 
    </div> 
    <button type="submit" class="btn btn-primary" >Save address</button> 
</form> 

JS

angular.module("app").controller("addressController", function ($scope, $uibModal, service) { 

    $scope.Address = {}; 
    $scope.form = {}; 

    $scope.save = function() { 
     if (modalInstance !== null) { 
      if (isValidForm()) { 
       modalInstance.close($scope.Address); 
      } 
     } 
    }; 

    var isValidForm = function() { 
     return $scope.form.editAddress.$valid; 
    } 
}); 
+0

Я просто подтверждаю это. У меня был такой же случай в моей программе, и это решение работало как шарм. Благодаря ... –

Смежные вопросы