私はAngularJSをかなり使い慣れていて、「ログイン」フォームを持つシングルページアプリケーションを試しています。フォームは "ng-submit"によってバインドされ、認証が成功した場合、そのコントローラはトークンを返すAJAX呼び出しを行います。後続のAJAX呼び出しはこのトークンを渡します。 (いいえ、私は基本的な認証を使用したくないのです。なぜなら、非ハックな「ログアウト」ボタンが必要なためです)。ブラウザがフォームフィールドをあらかじめ設定しているとAngularJS "ng-submit"に問題がありますか?
ユーザーがフィールドに空白値でフォームを送信しようとすると、AngularJSは、ツールチップが表示されるように、私は、私のユーザー名とパスワードのフィールド「必要」と設定している:
は<form name="loginForm" ng-submit="login()">
<fieldset>
<legend>Sign In</legend>
<label>Email</label>
<input name="loginEmail" type="text" placeholder="Registered email address…" ng-model="loginEmail" required>
<label>Password</label>
<input name="loginPassword" type="password" placeholder="Password…" ng-model="loginPassword" required>
<br/>
<button type="submit" class="btn">Login</button>
</fieldset>
</form>
問題が発生しましたいくつかのブラウザ(少なくともFirefox)は、ユーザがブラウザにユーザ名とパスワードを覚えておき、次回にそれを入力するかどうかを尋ねます。
これらのフィールドのいずれかがブラウザに入力されると、AngularJSは基本的に動作を停止します。 "ng-submit"の送信フォームは送信されません。バインドされたコントローラ機能はまったく呼び出されません。私の最初の考えは、人口密度の高いフィールドがイベントを引き起こさなかったため、AngularJSはまだ空白だと考えていたということでした。しかし、空白のフィールドについて警告するためにポップアップするツールチップはありません。それはちょうど完全にシャットダウンAngularJSのようなものです。
奇妙なことに、いずれかのフィールドに手動で編集するとすぐに、AngularJSが再び有効になります...検証ツールチップとフォーム提出が再び開始されます。
ここにバグがありますか、または私の最後に知識がないという問題がありますか? AngularJSでブラウザに埋め込まれたフィールドを認識させるにはどうすればよいですか?または、この領域に問題がある場合、ブラウザがAngularJSに干渉しないようにフィールドを事前に設定しないようにするにはどうすればよいですか?
を見ることができます。フレームワークやJavaScriptなしでこれを検討してください:http://jsfiddle.net/7GvYj/ – Esailija
面白い!私はAngularJSを操作する前に "required"属性を使用したことがなかったので、そのフレームワークの一部であると仮定しました。元々の問題は、AngularJSの観点からは、ブラウザに埋め込まれたフォームフィールドを認識していないようです。 –
'login'関数が全く呼び出されていないことを確かめてください。 – Esailija