AngularJS-将验证错误从子ngModelController传播到父ngModelController

时间:2019-03-01 11:32:54

标签: angularjs ngmodel

我正在AngularJS中创建一个数字输入指令,其中包含文本输入和递增/递减按钮:

A number picker

为简洁起见,我对其进行了简化,但这实际上是实现:

HTML模板

<div class="number-input">

    <input type="text"
           class="form-input"
           ng-model="number"
           placeholder="{{placeholder}}"
           pattern="^-?(\d+|\d*\.\d+)([e|E]\d+)?$" />

    <div>

        <button type="button" ng-click="number++">
            <i class="fa fa-plus"></i>
        </button>

        <button type="button" ng-click="number--">
            <i class="fa fa-minus"></i>
        </button>

    </div>

</div>

JavaScript

angular
    .module('exampleModule')
    .directive('numberInput', numberInput);

function numberInput() {
    return {
        restrict: 'E',
        replace: true,
        templateUrl: 'numberInput.html',
        scope: {
            placeholder: '@?',
            number: '=ngModel'
        },
        require: 'ngModel'
    };
}

这将导致两个ngModel控制器-一个用于外部数字输入指令,一个用于内部文本输入。问题是,如果用户输入的内部视图值无效,即它与pattern属性中定义的正则表达式不匹配,则内部ngModel控制器会将验证器ID添加到其$ error对象,而外部ngModel控制器会不是。

因此,我无法输出“模式”验证器的验证错误:

<label class="label">Number</label>

<number-input name="numberInput"
              ng-model="ctrl.number"
              placeholder="Number"></number-input>

<ul ng-show="ctrl.demoForm.numberInput.$dirty">

    <li ng-show="myForm.numberInput.$error.required"
        class="form-error">Please enter a number</li>

    <li ng-show="myForm.numberInput.$error.pattern"
        class="form-error">The number you entered is not valid</li>

</ul>

我意识到我可以删除模式属性,并使用$ parsers将验证移到外部ngModelController上,但是我有更复杂的输入,在那里这不可行。例如范围输入,其内部使用两个数字输入作为下限和上限。在这种情况下,数字选择器需要在其输入中的任何一个无效时通知范围选择器,并且范围选择器需要在错误中反映出来。

我真正想要的是外部ngModel继承内部ngModel的错误。这可能吗?如果可以,怎么办?

谢谢!

0 个答案:

没有答案