私が達成したいと思うものはかなりシンプルです。必要なフィールドを持つフォームを用意しましょう。たとえば、選択して入力してみてください(とにかく入力と同じ状況です)。ボタンをクリックしたときの確認メッセージを表示
ボタンをクリックしたときにのみ、ng-messages
を表示したいとします。フォームフィールドがボタンをクリックする前にタッチされた場合、正常に動作します。しかし、フォームフィールドが$untouched
の場合、私はそれを行うことができません。
私はこれをプログラムで設定してフォームフィールドに$touched
を設定して解決しましたが、このuggly 'hack'がなければ解決できる方法があるかどうかは疑問です。参照用
// 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です。
ありがとうございます。
@joyBlanks!にお返事いただきありがとうございますが、私はユースケースのためにタイプ・サブミットを設定することはできません。私もnovalidateを設定しようとしましたが、どちらも動作しません。何か案が?理想的な解決策は、コントローラからメッセージをプログラマチックに表示することです...あなたのプランナーのBTWは、ボタンタイプはファイルであり、送信しません。 – troig
フォームはsubmit type = submitを使用できないので、submit formをオーバーライドしたい場合は、ng-submit = "$ event.preventDefault()"を使用しますか? – joyBlanks
ありがとうもう一度:)私はあなたを正しく理解しているかどうかはわかりません。 [this](http://codepen.io/anon/pen/RGkwGp)はどういう意味ですか?私の元のコードが以前のバージョンの角材料で動作していた理由は分かりませんが...あなたのコメントの提案であなたの答えを編集してください、私はそれを受け入れます。ありがとう – troig