3

在 AngularJS 应用程序中,我有两个下拉菜单,一个用于成人人数,另一个用于儿童人数。我需要验证孩子的数量是否总是低于或等于成人的数量。

我已经制定了一个自定义指令来验证这一点,当我改变孩子的数量时它工作正常,但当我改变成人的数量时我也需要它工作。

<select name="adults" ng-model="pax.adults" ng-options="v for v in options">
</select>
<select name="children" ng-model="pax.children" ng-options="v for v in options" children>

app.directive('children', function () {
    return {
        require: 'ngModel',
        link: function (scope, elm, attrs, ctrl) {
            var pax = scope.pax;
            ctrl.$parsers.unshift(function (viewValue) {
                ctrl.$setValidity('children', viewValue <= pax.adults);
                return viewValue;
            });
        }
    };
});

比如我有2个大人3个小孩,小孩数是无效的。如果我将孩子的数量更改为 2,它将变为有效,但如果我将成人的数量更改为 3,则不会触发孩子验证。

以角度方式实现这一目标的最佳方法是什么?

这是一个 jsFiddle 说明我在做什么:http: //jsfiddle.net/geZB5/

干杯,

4

1 回答 1

1

好的,在AngularJS google group中找到了答案,只需要添加一个关于成人值的手表:

        scope.$watch('pax.adults', function(value) {
            ctrl.$setValidity('children', ctrl.$viewValue <= value);
        });

对应的jsFiddle:http: //jsfiddle.net/4vfBf/

于 2013-07-08T13:35:18.603 回答