【问题标题】:Why name attribute required in AngullarJs validation为什么在 AngularJs 验证中需要名称属性
【发布时间】:2014-10-26 12:10:30
【问题描述】:

朋友,我是 angularjs 新手,请解释为什么 angularjs 验证需要 name 属性

<form  name="lform" novalidate>
<input type="text"  name="userName" ng-model="userName" required novalidate/>
<span style="color:red" ng-show="lform.userName.$dirty && lform.userName.$invalid">
<span ng-show="lform.userName.$error.required">Username is required.</span>
</span>
<br/>
</form>

如果我删除 name="userName" 代码不起作用,请解释这一点。

Update: If I remove "ng-model" it is not working, but I can change "ngmodel='newName'" is working, please explain this reason also.

【问题讨论】:

标签: angularjs angularjs-validation


【解决方案1】:

这就是 HTML 表单的工作方式,名称描述了将发送到服务器的参数。

Angular 的方法是扩展 HTML 及其行为,而不是发明轮子。 Angular 封装了“表单”(参见 ngForm 指令)并对其进行扩展。因为 name 是表单中输入的唯一 id,它也是 ngForm 集合中输入的唯一 id。

ng-model 是另一个将输入值绑定到当前范围内的变量的指令,它不必与 name 保持相同的值。

让我们以你的例子来改变 ng-model:

<form  name="lform" novalidate>
<input type="text"  name="userName" ng-model="object.name" required novalidate/>
<span style="color:red" ng-show="lform.userName.$dirty && lform.userName.$invalid">
<span ng-show="lform.userName.$error.required">Username is required.</span>
</span>
<br/>
</form>

验证将起作用,但将在您的范围内更新的变量是“object.name”。

总而言之,lform.userName 保存元数据,object.name 保存实际数据。

【讨论】:

  • 为什么这里需要 ng-model,即使我给不同的名字
  • ng-model 允许您将输入实际绑定到您的范围。这告诉 Angular 这个输入是你的“FormController”的一部分,因此需要验证和处理。
  • 我同意这一点,但在这里我不会在任何地方使用 object.name,而不是为什么它是验证所需的属性
  • 稍后在您的 cmets 中获得它。谢谢
【解决方案2】:

答案就在您的代码中。

<span ng-show="lform.userName.$error.required">Username is required.</span>

Angular 正在使用输入名称来存储错误相关信息。

lform – 您的表单名称
用户名——你输入的名字

【讨论】:

  • 如果是这样,那么为什么 name="userName" ng-model="userName" 应该相同
  • 抱歉,现在知道了,但是还有一个疑问,如果它使用名称属性,为什么这里需要 ng-model
  • ng-model 和 name 不必相同,看我的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
  • 2023-03-22
  • 2016-02-08
  • 2020-04-17
相关资源
最近更新 更多