0

鉴于此标记...

<form name="myForm">
       <input type="text" name="myField" required ng-model="field1" />
</form>

我可以使用以下脚本访问该字段的有效性...

myForm.myField.$error.required

但是,如果我的代码在指令中,那么我需要该指令依赖于 ngModel 并且我需要像这样访问该字段的有效性......

$ngModel.$valid.required

因此,第一种方法使它看起来像是对表单元素应用了验证,而第二种方法使它看起来好像在模型上定义了验证。第一个似乎更准确,因为如果我直接编辑模型,我可以绕过验证。

4

1 回答 1

1

当你给一个表单命名时,比如myForm,Angular 会使用这个名称将FormController发布到当前的 $scope 上,所以在你的视图myForm中就是表单的 FormController(实际上是$scope.myForm)。

当你给一个表单元素一个名字时,比如myField,Angular会将 ngModelController发布到 FormController 上,所以在你的视图myForm.myField中是表单元素的 ngModelController(实际上是$scope.myForm.myField)。

在指令中,如果指令没有定义新的范围,它可以通过范围......或者(更常见的情况)......如果指令是在特定的表单元素,它可以require: 'ngModel'用来获取对该表单元素的 ngModelController 的引用。

在您的两个示例中,myForm.myField...并且$ngModel...(我假设 $ngModel 是您的链接函数的第四个参数)都在访问表单元素的 ngModelController。

(什么是$ngModel.$valid.required?ngModelController 有一个$valid属性,但它似乎不是一个对象哈希。所以我希望只是$ngModel.$valid被使用。)

于 2013-07-10T14:27:15.433 回答