Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用“引用命名表格”;控制器为;语法_Javascript_Angularjs - Fatal编程技术网

Javascript 如何使用“引用命名表格”;控制器为;语法

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

在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>
</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>