所以我有一个带有ng-if
表达式的div的表单。没有ng-if
,我可以$scope.form
,但正如我发现ng-if
创建了一个子范围。
如何在控制器中访问表单呢?
基本上:
<div ng-if="whatever">
<form name="x">
</form>
</div>
答案 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元素。
希望这有助于其他人,欢呼!