指令中ng-form的状态不会传播到外部表单

时间:2014-08-14 12:57:43

标签: angularjs forms validation angularjs-directive angularjs-ng-form

我有一个myNumber指令,它包含一些输入周围的嵌套ng-forms。输入的ng-required属性设置为true,并且具有某个ng-pattern。问题是输入的状态(例如,ng-valid-required,ng-invalid-pattern)传播到指令内的ng-forms。因此,它们与输入本身具有相同的状态,这是想要的行为。但是,一旦超出指令本身,指令周围的ng-form就不会得到ng-forms的状态。

<ng-form name="outerForm" id="outerForm">
    <my-number ...></my-number>
</ng-form>

虽然输入和ng-forms内部指令的状态类似于ng-valid-required ng-dirty ng-invalid ng-invalid-pattern,但是outerForm是ng-pristine ng-valid。

这是正常的行为,这是AngularJS的工作方式,还是有一种解决方法可以将状态置于指令之外?

1 个答案:

答案 0 :(得分:1)

我使用控制器功能通过以下方式解决了这个问题:

      controller: function($scope) {
            $scope.$watch('innerForm.$valid', function() {
                if ($scope.innerForm.$valid) {
                    $scope.$parent.outerForm.$setValidity(null, true);
                } else {
                    $scope.$parent.outerForm.$setValidity(null, false);
                }
            });
        }