Проверка формы AngularJS отложена?

#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 уже выполняется