为什么$ validators不会更新ngMessages上的$ errors值?

时间:2017-04-18 18:42:05

标签: angularjs angular-ngmodel ng-messages

正在调用验证程序,并按预期返回true / false。但是,即使验证器返回false,html仍会按预期显示类“ng-valid”而不是“ng-invalid”,以使ng-messages行为正常。当我使用标准的“必需”错误时,没有任何问题,但任何自定义都不起作用。

经过调试,我还发现$ error正在根据需要更新,但不是几天。

我创建了一个具有自定义验证器daysofmonth的组件,如下所示:

    this.ngModel.$validators.daysofmonth = function(modelValue) {
        modelValue = modelValue || '';
        let pieces = modelValue.split(',');
        let isValid = true;

        pieces.forEach(function(piece) {
            let numberValue = parseInt(piece, 10);

            if (isNaN(numberValue)) {
                if (piece.trim() && piece.trim() !== 'L') {
                    isValid = false;
                }
            } else if (numberValue < 1 || numberValue > 31) {
                isValid = false;
            }
        });

        return isValid;
    };

html看起来像:

<form name="form">
    <div>
        <input name="daysofmonth" ng-model="ctrl.daysOfMonth">
    </div>

    <ng-messages for="form.daysofmonth.$error">
        <ng-message when="daysofmonth">Please enter valid days.</ng-message>
    </ng-messages>
</form>

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

isValid永远是真的......

forEach方法是异步方法,因此如果您希望isValid变量在返回时保持最新,则必须在回调中执行此操作。但是,您将从回调而不是从函数返回结果,因此,另一种方法是用标准的同步for循环替换forEach循环。