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 元素。
希望这对其他人有帮助,干杯!
所以我有一个 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 元素。
希望这对其他人有帮助,干杯!