2016-09-22 3 views
1

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

Я хочу показать ng-messages только при нажатии кнопки. Если поле формы было дотронуто до нажатия кнопки, оно отлично работает. Но я не могу это сделать, если поле формы $untouched.

Я решил его установить программно $touched в поле формы, но мне интересно, есть ли способ решить его без этого «взлома».

// Any way to avoid this line?? 
$scope.myForm.favoriteColor.$setTouched(); 
// 

Код для ссылки:

HTML:

<md-input-container> 
    <label>Favorite Color</label> 
    <md-select name="favoriteColor" ng-model="favoriteColor" required> 
     <md-option value="red">Red</md-option> 
     <md-option value="blue">Blue</md-option> 
    </md-select> 
    <div class="errors" ng-messages="myForm.favoriteColor.$error" ng-show="validateWithHack"> 
     <div ng-message="required">Required</div> 
    </div> 
</md-input-container> 

JS:

$scope.validateWithHack = function() { 
    if ($scope.myForm.$valid) { 
    alert('Form is valid.'); 
    } else { 
    // Any way to avoid this line?? 
    $scope.myForm.favoriteColor.$setTouched(); 
    // 
    $scope.validateWithHack = true; 
    } 
}; 

Я уверен, что это работает с предыдущими версиями углового-материал. Теперь я использую последнюю версию 1.1.1.

Вот plunker где проблема может быть легко воспроизведены.

Заранее спасибо.

ответ

1

Проверьте CodePen

Я добавил novalidate в форму и добавил type="submit" к вашему md-button

Edit 2: Кнопка type="submit" фактически запускает отправки формы и поэтому угловая форма подтверждает себя первым , Что нам нужно сделать, так это предотвратить отправку и просто выполнить проверку.

novalidate (Просто чтобы подавить проверку HTML5) в форму и добавил type="submit" к вашему md-button: Это будет проверять форму и отправить форму, чтобы проверить и предотвращения отправки формы добавления ng-click="submitMethod(<yourForm>, $event)" в <md-button> и определить метод как

$scope.submitMethod(form,ev){ 
    ev.preventDefault(); 
    //rest of your form work say if you want to do ajax or anything you like 
    //check if form valid using form.$invalid 
} 
+0

Спасибо, что ответили на @joyBlanks !, но, боюсь, я не могу установить тип отправки для моего варианта использования. Я также попробовал просто установить новагинат, но не работает. Есть идеи? Идеальное решение будет отображать сообщение программно из контроллера ... BTW, в вашем плунтере тип кнопки - это файл, а не отправка. – troig

+1

это потому, что форма подает вам использование can not type = submit, я бы сказал, если вы хотите переопределить форму отправки ng-submit = "$ event.preventDefault()" no? – joyBlanks

+0

Еще раз спасибо :) Не уверен, правильно ли я вас понял. Это [это] (http://codepen.io/anon/pen/RGkwGp), что вы имеете в виду? Кажется, работает, хотя я не понимаю, почему мой исходный код работал в предыдущих версиях углового материала ... Пожалуйста, отредактируйте свой ответ с предложениями своих комментариев, и я соглашусь с ним. благодаря – troig

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