【Angular】--- If ngModel is used within a form tag, either the name attribute must be set or the form

前端之家收集整理的这篇文章主要介绍了【Angular】--- If ngModel is used within a form tag, either the name attribute must be set or the form前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

【前言】:

在最近的项目中,对angular的学习也才算是开始入门。对于angular小白的我来说,每次遇到问题都是很好的成长机会,哪怕很小,(#^.^#)。不断的在错误中成长吧。

错误】:

  1. ERROR Error: If ngModel is used within a form tag,either the name attribute must be set or the form
  2. control must be defined as 'standalone' in ngModelOptions.
  3.  
  4. Example 1: <input [(ngModel)]="person.firstName" name="first">
  5. Example 2: <input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone: true}">

【分析】:

要能有很好的耐心看错误提示很重要,每一个错误解决方案也往往就在错误提示中隐藏甚至是“暴露”着。O(∩_∩)O哈哈~

上面的异常信息告诉我们如果再表单标签中使用ngModel,则必须设置name属性,或者在ngModelOptions中必须将表单控件定义为“standalone”。
因为ngForm持有通过ngModel指令和name属性为各个元素创建的那些控件,并且监视他们的属性变化,包括有效性。它还有自己的valid属性,只当其中的所有控件都有效时,它才有效。

【理论】:

angular2的表单主要用到了ngForm,ngModel,ngSubmit。ngSubmit对应的函数是我们提交表单调用函数。angular2通过ngForm将按钮的禁用/启用状态和表单的有效性关联起。
#loginForm、#username和#userpwd都是angular2中的模板引用变量;
#username和#userpwd可以监控input输入框的状态,#loginForm可以用来监控表单的状态,通过这些状态可以进行输入错误提示以及表单提交控制。
HTML控件(比如input、select等)的状态主要包括
pristine和dirty:控件是否使用过,或者理解成是否输入过内容
invalid和valid:控件输入是否有效
touched和untouched:控件是否已经被访问过。

【实战】:

  1. <div class="modal-body">
  2. <form role="form" class="form-horizontal" #validationForm1="ngForm">
  3. <div class="form-group">
  4. <div class="col-sm-6 form-inline">
  5. <label class="control-label">姓名:</label>
  6. <label>
  7. <input type="text" id="familyMemName" class="form-control" [(ngModel)]="homeInfo.familyMemName" name="familyMemName" ngModel
  8. #familyMemName="ngModel" required>
  9. </label>
  10. </div>
  11. <div class="col-sm-6 form-inline">
  12. <label class="control-label">关系:</label>
  13. <label>
  14. <select class="form-control sel-width" [(ngModel)]="homeInfo.relationshipId" name="relationshipId" required>
  15. <option *ngFor="let option of relationOptions" [value]="option.id">{{option.dictName}}</option>
  16. </select>
  17. </label>
  18. </div>
  19. </div>
  20. ……
  21. </div>
  22. </form>
  23. </div>
  24.  
  25. <div class="modal-footer">
  26. <!-- [disabled]="!addform.form.valid" -->
  27. <button type="button" class="btn btn-primary" [disabled]="!validationForm1.form.valid" (click)="add(addModal)">
  28. 添加
  29. </button>
  30. <button type="button" class="btn btn-default" (click)="close(addModal)">
  31. 取消
  32. </button>
  33. </div>

【总结】:

validationForm1.form.valid用来判断form表单中的控件是否全部有效。在ng2表单中使用ngModel必须带name属性或者使用[ngModelOptions]=”{standalone: true}”。否则会报上面的错误

猜你在找的Angularjs相关文章