@Tashiro

AngularJS vs автозаполнение форм бразузера?

Не могу понять как бороться с автозаполнением формы браузером.
Есть форма :
<form>
<input ng-model="user.username" name="username" type="text" placeholder="Электронная почта" />
<input ng-model="user.password" name="password" type="password" placeholder="Пароль" value="" />
</form>


Есть контроллер который отправляет эту форму :
this.submit = function () {
		$http.post(action, $scope.user)
			.success(
			function (data) {
				if (data.result == "success") {
					window.location = data.url;
				} else {
					$scope.login.errors = data.message;
				}
			})
			.error(function () {
				$scope.login.errors = "Непредвиденная ошибка, попробуйте позже";
			})
	};


как только браузер автозаполняет эту форму, angular не ловит этот момент и вроде-бы форма заполнена, а данные пустые улетают. Как бороться?
  • Вопрос задан
  • 3668 просмотров
Решения вопроса 1
itspers
@itspers
Это открытый тикет - https://github.com/angular/angular.js/issues/1460

В общем виде все решения сводятся к директиве, которая таймаутом проверяет значение инпута и обновляет модель. Там посмотрите по тикету - куча реализаций, например:

app.directive("watchAutofill", [
         '$timeout',
function ($timeout) {
    var INTERVAL_MS = 500;

    return {
        require: 'ngModel',
        link: function (scope, element, attrs, ngModel) {

            var timer;
            function startTimer() {
                timer = $timeout(function () {
                    var value = element.val();
                    if (value && ngModel.$viewValue !== value) {
                        ngModel.$setViewValue(value);
                    }
                    startTimer();
                }, INTERVAL_MS);
            }

            scope.$on('$destroy', function () {
                $timeout.cancel(timer);
            });

            startTimer();
        }
    };
}
]);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы