Рассмотрим следующий пример:
<input type="text" ng-model="client.phoneNumber" phone-number>
<button ng-click="doSomething()">Do Something</button>
.directive("phoneNumber", function($compile) {
return {
restrict: 'A',
scope: true,
link: function(scope, element, attrs) {
scope.mobileNumberIsValid = true;
var errorTemplate = "<span ng-show='!mobileNumberIsValid'>Error</span>";
element.after($compile(errorTemplate)(scope)).on('blur', function() {
scope.$apply(function() {
scope.mobileNumberIsValid = /^\d*$/.test(element.val());
});
});
}
};
});
Глядя на демонстрацию , если вы добавите say 'a' в конце номера телефона и нажмите кнопку doSomething()
не называется. Если вы снова нажмете кнопку, вызывается doSomething()
.
Почему doSomething()
не вызывается в первый раз? Любые идеи, как это исправить?
Примечание. Важно соблюдать валидацию при размытии.