Javascript 如何使用“引用命名表格”;控制器为;语法
在angularjs中使用“controller as”语法时,在控制器中引用命名表单时遇到问题。例如,给定以下HTML:Javascript 如何使用“引用命名表格”;控制器为;语法,javascript,angularjs,Javascript,Angularjs,在angularjs中使用“controller as”语法时,在控制器中引用命名表单时遇到问题。例如,给定以下HTML: <div ng-controller="MyController as ctl"> <form role="form" name="newItemForm"> <input type="text" id="firstName" ng-model="ctl.firstName"/> </form> </di
<div ng-controller="MyController as ctl">
<form role="form" name="newItemForm">
<input type="text" id="firstName" ng-model="ctl.firstName"/>
</form>
</div>
self.newItemForm
未定义。如果我使用的是$scope约定,我可以引用$scope.newItemForm。在控制器中,是否有其他方法可以在不使用作用域的情况下作为语法执行此操作?将HTML更改为:
<div ng-controller="MyController as ctl">
<form role="form" name="ctl.newItemForm">
<input type="text" id="firstName" ng-model="ctl.firstName"/>
</form>
</div>
然后,您将能够按照预期在控制器中访问命名表单,而无需注入
$scope
。在此处找到此信息:document.getElementsByName('newItemForm')
浮现在脑海中?adeneo,这将获得DOM元素,但不是angular FormController,用于在angularjs中设置表单元素的有效性。请参阅有关如何实现自定义验证的文档。您不应该直接从控制器访问DOM元素,它应该只有模型和函数来修改用于视图的模型。shaunhusain,也许我没有解释清楚,但我没有访问DOM元素。我试图使用$scope.newItemForm.input.$setValidity()语法,但当您使用“控制器作为”语法时,通常不会直接访问范围,因此需要另一种方式来访问。感谢您的澄清,因为他们提到在控制器中使用文档,所以在这一部分对adeneo的响应更大。在这些示例中,我看不到他们访问表单的任何地方。是否有理由使用文档中显示的指令不适合您?我自己对验证细节不太熟悉。这是一个好的实践吗?通过这样做,我理解您正在将整个表单连接到控制器!相反,您可以注入$scope,表单将自动绑定到它。@DSB这是正确的,但使用单独的、命名的控制器会使您的分离更加清晰,请参阅:但不能访问输入的验证。为此,我发现必须在输入中使用“name”属性,并通过ctl.form.firstName.$dirty
等访问它(不仅仅是指向控制器中变量的ctl.firstName
)
<div ng-controller="MyController as ctl">
<form role="form" name="ctl.newItemForm">
<input type="text" id="firstName" ng-model="ctl.firstName"/>
</form>
</div>