Jestem całkiem nowy w AngularJS i eksperymentuję z aplikacją jednostronicową z formularzem "logowania". Formularz jest związany "ng-submit", a jego kontroler sprawia, że wywołanie AJAX zwraca token, jeśli uwierzytelnienie zakończyło się pomyślnie. Kolejne wywołania AJAX przekazują ten token. (Nie, NIE chcę używać podstawowego uwierzytelnienia, ponieważ chcę mieć niehackowy przycisk "wylogowania").AngularJS "ng-submit" ma problemy, gdy przeglądarka wypełnia pola formularza?
mam setup nazwę użytkownika i hasło Pola z „wymagane”, tak aby angularjs wyświetli podpowiedź, gdy użytkownicy próbują przesłać formularz z pustą wartość w polu:
<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>
Problem pojawia się, gdy niektóre przeglądarki (przynajmniej Firefox) pyta, czy użytkownik chce, aby przeglądarka zapamiętała nazwę użytkownika i hasło, a następnie zapełni ją następnym razem.
Gdy przeglądarka zapełnia jedno z tych pól, AngularJS zasadniczo przestaje działać. Formularz "ng-submit" nie zostanie przesłany ... funkcja kontrolera nie jest w ogóle wywoływana. Na początku myślałem, że wstępnie wypełnione pola nie wywołują zdarzenia, więc AngularJS uważa, że nadal są puste. Jednak nie pojawiają się żadne podpowiedzi do ostrzeżenia o pustych polach. To tak, jakby AngularJS całkowicie się wyłączył.
Co dziwne, zaraz po wykonaniu dowolnej ręcznej edycji do dowolnego z tych pól, AngularJS powraca do życia ... etykiety narzędzi sprawdzania poprawności i przesyłania formularzy zaczynają działać ponownie.
Czy jest tu błąd, czy też problem z brakiem wiedzy na mój temat? Jak sprawić, by AngularJS rozpoznawał pola wypełniane przez przeglądarkę? Lub jeśli występują problemy w tym obszarze, w jaki sposób można zapobiec przeglądaniu pól w przeglądarce, aby nie zakłócały one działania AngularJS?
Nie jest kanciasty, który wyświetla podpowiedź lecz funkcjonalność przeglądarki. Rozważ to bez żadnych frameworków lub javascript: http://jsfiddle.net/7GvYj/ – Esailija
Interesujące! Nigdy nie użyłem "wymaganego" atrybutu przed majsterkowaniem z AngularJS, więc założyłem, że jest to część tej struktury. Pierwotne pytanie pozostaje jednak w zakresie, w jakim AngularJS najwyraźniej nie rozpoznaje pól formularzy wypełnionych przeglądarką. –
jesteś pewien, że twoja funkcja 'login' nie jest w ogóle wywoływana. – Esailija