Angularjs 访问表单';服务的有效性

Angularjs 访问表单';服务的有效性,angularjs,validation,angularjs-service,Angularjs,Validation,Angularjs Service,在我的申请表中,我有两个非常相似的表格。它们各自有不同的控制器,所有公共功能都存储在一个服务(VehicleFormService)中 每个表单都有子表单。我希望两个表单都有一个通用函数,用于访问子表单的有效性。如果我在一个控制器里,我可以做这样的事情 $scope.subForm1.$valid 但是,由于这两种功能都是通用的,我想将其添加到服务中,但我不确定如何访问表单有效性。您可以将属性添加到服务中,然后添加到控制器中 angular.extend($scope,myservice) $

在我的申请表中,我有两个非常相似的表格。它们各自有不同的控制器,所有公共功能都存储在一个服务(VehicleFormService)中

每个表单都有子表单。我希望两个表单都有一个通用函数,用于访问子表单的有效性。如果我在一个控制器里,我可以做这样的事情

$scope.subForm1.$valid

但是,由于这两种功能都是通用的,我想将其添加到服务中,但我不确定如何访问表单有效性。

您可以将属性添加到服务中,然后添加到控制器中

angular.extend($scope,myservice)
$scope.$watch('subForm1',furnction(){});
或者其他方法设置parentCtrl,这样您就可以利用它
在子控制器中,您可以将其与服务同步。这里有一个简单的服务:

angular.extend($scope,myservice)
$scope.$watch('subForm1',furnction(){});
app.service("formService", function() {
    return {
        isValid: false
    };
});
app.controller("secondController", function($scope, formService) {
    var _this = this;
    this.$scope = $scope;
    this.formService = formService;
    $scope.isValid = formService.isValid;
    $scope.$watch(function() {
        return _this.formService.isValid;
    }, function() {
        _this.$scope.isValid = _this.formService.isValid;
    });
});
这是最接近表单的控制器,用于监视表单的有效性:

app.controller("myController", function($scope, formService) {
    var _this = this;
    this.formService = formService;
    this.$scope = $scope;
    $scope.$watch("myForm.$valid", function() {
        _this.formService.isValid = _this.$scope.myForm.$valid;
    });
});
此控制器监视服务更新其自身$scope中的有效性(在摘要循环期间调用它并刷新服务中的值):


功能齐全的提琴在这里:

另外,请注意您询问如何“访问表单有效性”。给表单一个名称(name=“xyz”),然后通过$scope.xyz.$valid访问它。。。表单将自动添加到控制器的$scope中。