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

标签 javascript angularjs ng-messages

我有一个带有自定义验证器和 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 不会反射(reflect),验证消息不会'不知何故更新:/

有什么想法吗?

编辑:当我在 ngMessages 行中进行下一个输入时,该输入和电话号码输入也会启动, View 也会更新,但已经晚了,就像如果它一样将省略一个周期来更新 View

最佳答案

由于 countrychange 事件不是由 Angular 触发的(即在摘要周期之外),因此您需要将验证调用包装在 $scope.$apply 内。

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

参见this discussion解释一下

关于javascript - 我可以手动触发 ngMessages 验证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37436575/

相关文章:

javascript - 如何获取 dojo 图表的句柄以调整它的大小?

javascript - 将 Require.js 与 Angular.js 一起使用是否有意义?

javascript - 多次解决 promise 是否安全?

javascript - ngMessages 无法与嵌套输入正常工作

javascript - 使用 ngMessages 验证自定义指令

angularjs - Angular - ng-messages 中的多个字段

javascript html update img src - 这有什么问题吗?

javascript - React onClick 无法正常工作

javascript - 光滑 slider - 更改输入焦点事件的可拖动状态

angularjs - 如何在选择选项更改时重置表单字段