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

时间:2015-10-03 18:04:38

标签: angularjs angularjs-scope angular-ng-if

所以我有一个带有ng-if表达式的div的表单。没有ng-if,我可以$scope.form,但正如我发现ng-if创建了一个子范围。

如何在控制器中访问表单呢?

基本上:

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

2 个答案:

答案 0 :(得分:3)

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

在控制器中

$scope.model = {
   whatever: true
};

然后在视图中:

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

现在,子范围将继承对象model,因此可以为其指定属性。

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

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

答案 1 :(得分:0)

就我而言,我试图为此字段设置自定义验证(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元素。

希望这有助于其他人,欢呼!