#javascript #angularjs #validation #angularjs-directive
#javascript #angularjs #проверка #angularjs-директива
Вопрос:
Я предполагаю, что проверка формы в AngularJS каким-то образом задерживается, что раздражает. У меня есть следующий код в функции ссылки моей директивы:
console.log(scope.signinForm.$invalid); // TRUE
scope.signin.email = 'some@email.com';
scope.signin.password = 'test';
console.log(scope.signinForm.$invalid); // still TRUE, should be FALSE at this point
Итак, я пошел дальше и использовал функцию setTimeout:
var myFunction = function () {
console.log(scope.signinForm.$invalid); // FALSE, which is correct
};
console.log(scope.signinForm.$invalid); // TRUE
scope.signin.email = 'some@email.com';
scope.signin.password = 'test';
setTimeout(myFunction, 500);
Может кто-нибудь сказать мне, что мне нужно сделать, чтобы мгновенно обновить $invalid ?
Спасибо,
Стивен
Комментарии:
1. Просто интересно — зачем вам нужно знать действительность формы внутри JS директивы?
2. @Ian — потому что, если форма недействительна, я бы хотел избежать обхода сервера, когда она нажимает кнопку отправки.
3. Ну, действительность формы обычно обрабатывается в представлении, предотвращая нажатие кнопки отправки там — отключаете ли вы или скрываете ее, пока форма не станет действительной. Я не думаю, что контроллер / директива должны обрабатывать такую логику. Если это имеет значение, вот пример: jsfiddle.net/m5rg8
Ответ №1:
Вы можете попробовать применить область :
console.log(scope.signinForm.$invalid); // TRUE
scope.signin.email = 'some@email.com';
scope.signin.password = 'test';
scope.$apply();
console.log(scope.signinForm.$invalid);
Комментарии:
1. Я пробовал это .. но затем я получаю следующую ошибку: [$rootScope:inprog] $apply уже выполняется