我可以手动触发 ngMessages 验证吗?

Can I trigger ngMessages validation by hand?

我有一个带有自定义验证器的输入字段和用于显示验证消息的 ng-messages。

<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 不会反映,验证消息不会以某种方式更新:/

有什么想法吗?

edit: 当我进入 ngMessages 行中的下一个输入时,该输入以及 phone-number 输入以及视图得到更新了,但是晚了,好像它会省略一个周期来更新视图

由于 countrychange 事件不是由 angular 触发的(即在摘要循环之外),您需要将验证调用包装在 $scope.$apply.

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

有关解释,请参阅 this discussion