AngularJS - 在控制器中访问 ng-if 表单

AngularJS - access ng-if'd form in controller

所以我有一个 div 和 ng-if 表达式的表单。没有那个 ng-if 我只能做 $scope.form,但是我发现 ng-if 创建了一个子作用域。

那我如何访问控制器中的表单?

基本上:

<div ng-if="whatever">
    <form name="x">
    </form>
</div>

始终在范围内使用模型对象,而不是将原始属性直接分配给范围对象

在控制器中

$scope.model = {
   whatever: true
};

然后在视图中:

<div ng-if="model.whatever">
    <form name="model.x">
    </form>
</div>

现在子作用域将继承对象 model,因此可以为其分配属性。

对于表单,ngForm 会将 name 中的值添加到模型中,并将在内部创建所有验证属性,这就是为什么没有必要最初创建 属性 在范围内

或者使用 controllerAs 别名和控制器语法来避免这种情况

就我而言,我试图为此字段 (ageRange) 设置自定义验证:

<div ng-if=car>  
  <ng-form name="driverInfo">  
     <select name="ageRange" ng-model="driver.ageRange" ng-change="checkAge(this)" required></select>
  </ng-form>
</div>

为此,我需要通过范围访问该字段,否则 $scope.driverInfo.ageRange.$setValidity 会做什么。

但由于它被 ng-if 包裹,我将 this 作为参数传递,因此我可以像这样从控制器访问它:

$scope.checkAge = function(model) {
  if ($scope.driver.ageRange.value === 'BELOW_MINIMUM_AGE') {
    model.driverInfo.ageRange.$setValidity('adult', false);
  }else{
    model.driverInfo.ageRange.$setValidity('adult', true);
  }
};

在这种情况下,this 是 childScope 本身,而不是 DOM 元素。

希望这对其他人有帮助,干杯!