Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.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 角度js'$表单输入中的isEmpty功能_Javascript_Angularjs_Html - Fatal编程技术网

Javascript 角度js'$表单输入中的isEmpty功能

Javascript 角度js'$表单输入中的isEmpty功能,javascript,angularjs,html,Javascript,Angularjs,Html,我的代码看起来像这样- <form name="myForm" ng-submit="!myForm.phone.$isEmpty(this.$viewValue)" action="/my/url" method="get"> <input name="phone"> <button type="submit">submit</button> </form> 提交 现在,即使我填写了电话号码字段,也无法提交表格 但如果我这样编码

我的代码看起来像这样-

<form name="myForm" ng-submit="!myForm.phone.$isEmpty(this.$viewValue)" action="/my/url" method="get">
<input name="phone">
<button type="submit">submit</button>
</form>

提交
现在,即使我填写了电话号码字段,也无法提交表格

但如果我这样编码:

<form name="myForm" ng-submit="!myForm.phone.$isEmpty(myForm.phone.$viewValue)" action="/my/url" method="get">
<input name="phone">
<button type="submit">submit</button>
</form>

提交
它现在工作得很好


所以困难在于“这个”。我甚至不能检查这个的上下文,它应该是$scope.myForm.phone的上下文,但不知为什么它不是。有人能解释一下吗。

这不是提交的目的
ng submit
是提交表单时调用的函数或表达式。这与验证无关。如果要确保文本字段在提交之前不为空,只需添加
required
,然后如果文本字段为空
myForm.$invalid
将为真

这就是你想要做的:

html

<form name="myForm" ng-submit="submit(phone)">
    <input name="phone" type="text" ng-model="phone.value" required>
    <button type="submit" ng-disabled="myForm.$invalid" >submit</button>
</form>
更新

传递到
ng submit
是对控制器的引用。由于将
name
属性设置为
myForm
,因此可以通过
this.myForm
访问表单模型,并通过
this.myForm.phone
访问手机模型。因此,如果要使用
$isEmpty
验证字段是否为空,则必须使用:

this.myForm.phone.$isEmpty(this.myForm.phone.$viewValue)

ng submit
用于在提交表单时提供处理程序。 您要查找的是禁用
submit
按钮并禁用
ng

<form name="myForm" ng-submit="functionInController()" action="/my/url" method="get">
<input name="phone" required>
<button type="submit" ng-disabled="myForm.$invalid">submit</button>
</form>

提交

请注意添加到输入中的
必需
指令。这确保提交时此字段不为空

回答正确。虽然我认为输入将需要分配一个
ng model
指令,以使验证生效。@MattHerbstritt这取决于具体情况。最近,我在研究一个复杂的问题,关于角度的形式。我还了解到,表单验证的所有角度指令(max、min、required等)实际上都是围绕浏览器属性的包装器。它们只提供额外的(角度)功能,但仍由浏览器处理。这就是为什么您可以添加
required
,而字段为空时将无法提交表单。但是,如果您提供自定义验证,表单的无效状态(角度)不会阻止它提交。您必须添加
ng disabled
来手动控制它。感谢残疾人、残疾人和其他人。但真正让我感兴趣的是,当我试图在$isEmpty()中使用“this”时,它的定义。实际上有两个输入,它们都是可选的,因此不使用required属性。但其中一个必须被填补。我在angular js中看到,如果输入字段不是脏的,那么该字段也是有效的,因此这里不使用$invalid。@Vinet'DEVIN'Dev valid或not可以由定义,
$dirty
没有验证的参考,它只是为了方便起见而自动生成的字段
这个
内部
ng submit
我想只是导致了一个无效的表达式。否。”此“”未导致无效的表达式。我可以用ng模式和一个好的正则表达式来验证电话号码。那不是我的问题。正如我所说,我可以在表单中有2个以上的非强制性输入。但我希望用户在提交之前至少填写一个。最简单的方法是使用$isEmpty()。现在,在这个函数中使用myForm.phone的上下文非常有用。但这种背景在那里是不可访问的。但是'this'关键字不是无效的,正在传递某些上下文,只是此。$viewValue未定义。输入字段不是必需的。无需使用所需的。之所以出现这种情况,是因为我的代码中以后可能会有多个输入字段,而且所有这些字段都不是必需的。唯一的条件是其中一个应该被填满。我找到了使用$isEmpty的最短方法。但我同意ng submit不应该这样使用
但是你能解释一下为什么我不能在$isEmpty()函数中使用myForm.phone的上下文吗?我惊讶地发现,
这个
可以在模板中访问,而不是在控制器中。但是你是对的,因为formController驻留在scope object中,所以可以访问它。那么这是否意味着即使我希望上下文是myForm.phone,我也不能在我的视图中这样做?as上下文始终是父级,即范围。没有;这是否违反了词法作用域的正常javascript行为?不,您无权更改作用域。但是,如果您实施a并应用于表单中的输入,指令将具有字段范围,因为它将引用字段的
ng model
<form name="myForm" ng-submit="functionInController()" action="/my/url" method="get">
<input name="phone" required>
<button type="submit" ng-disabled="myForm.$invalid">submit</button>
</form>