Могу ли я запустить проверку ngMessages вручную?

У меня есть поле ввода с пользовательским валидатором и сообщениями ng для отображения сообщений валидации.

<input type="tel"
       ng-model="ctrl.phoneNumber"
       phone-number
       required />

Пользовательский валидатор прост:

ngModel.$validators.phoneNumber = () => {
    return $iElem.intlTelInput('isValidNumber');
};

Для некоторых других событий я бы хотел запустить проверку вручную, также просто

$iElem.on('countrychange', () => {
    ngModel.$validate();
});

Что вызовет мой пользовательский валидатор, а также это снова подтвердит номер, form.*.$error объект также будет обновлен, но ngMessages не будет отражаться, сообщения проверки не будут обновляться до некоторой степени:/

Любая идея?

редактировать: когда я иду к следующему вводу в строке, ngMessages включается для этого ввода И для ввода номера телефона, и представление обновляется, но уже поздно, как если бы он пропустил один цикл для обновления представления

1 ответ

Решение

Так как countrychange событие не вызывается угловым (т. е. вне цикла дайджеста), вам нужно обернуть вызов проверки внутри $scope.$apply,

iElem.on('countrychange', () => {
  $scope.$apply(function(){
    ngModel.$validate();
  })
});

Смотрите это обсуждение для объяснения

Другие вопросы по тегам