鉴于此标记...
<form name="myForm">
<input type="text" name="myField" required ng-model="field1" />
</form>
我可以使用以下脚本访问该字段的有效性...
myForm.myField.$error.required
但是如果我的代码在指令中,那么我需要指令依赖于ngModel,我需要像这样访问字段的有效性......
$ngModel.$valid.required
因此第一种方法使得它看起来像验证应用于表单元素,而第二种方法使得它看起来好像在模型上定义了验证。第一个似乎更准确,因为如果我直接编辑模型,我可以绕过验证。
答案 0 :(得分:1)
当您为表单指定名称(例如myForm
)时,Angular会使用该名称将FormController发布到当前的$ scope上,因此在您的视图中myForm
是表单的FormController(这真的是$scope.myForm
)。
当您为表单元素指定名称(例如myField
)时,Angular会将ngModelController发布到FormController上,因此在您的视图中myForm.myField
是表单元素的ngModelController(实际上是$scope.myForm.myField
)。
在一个指令中,如果指令没有定义一个新的作用域,它可以通过作用域......或(更常见的情况)以相同的方式访问FormController和ngModelControllers ...如果指令被定义在特定的表单元素上,它可以使用require: 'ngModel'
来引用该表单元素的ngModelController。
在您的两个示例中,myForm.myField...
和$ngModel...
(我假设$ ngModel是链接函数的第四个参数)都访问表单元素的ngModelController。
(什么是$ngModel.$valid.required
?ngModelController有$valid
属性,但它似乎不是对象哈希。所以我希望只使用$ngModel.$valid
。)< / p>