FormControl与FormControlname

前言

最近学习关于angular的系统的时候,突然间启动单元测试时报错,
image.png
一开始我觉得这是个小问题,可事情却没那么简单。单元测试

解决过程

本身先试了试,没有解决。我就去百度,
Cannot find name 'FormControl'
找到一个思否的提问
image.png
image.png
看回答,很简单,就是缺乏了引入FormsModule模块,而后我就陷入了这样的思路错误。报错没有提示哪一个文件,我就使用全局搜索找到全部使用过FormControl的v层对应的单元测试文件,加入FormModule,可是全都试了一遍以后仍是没有解决。这让我犯了难,又看了不少网上的解决办法,他们的思想几乎都统一在缺乏FormModule模块上。七搞八搞没有解决。这是我很头疼。
后来,我发现了他提示的一个陌生路径,他说在这个路径下的18151行找不到名字“FormCotnrol”,学习

image.png
我起初看到这个陌生路径,认为他是某个引入的的某个包的路径,引入的包里的内容怎么可能出错呢,我又没有去动过他。后来打开了它,他果真有红色提示,
image.png
但是我也想不明白他怎么会报错,我就先按照他提示的去改让我引入"@angular/forms"下的FormControl
image.png
我引入后报了新的错误。
这时我再也想不出解决办法了,我去问学长,学长看后也是不知怎么回事,他看了它的文件后让我把FormControl改为never,而后就都正常了。我又询问了其余小伙伴的文件,他们就是never
image.png
这个错误让我莫名其妙的,难道是我梦游整出来的错误?测试

FormControl与FormControlname

在网上查找的过程当中也学会了知识,好比咱们在项目中既用过FormControl,也用过FormControlname,两者使用事例以下。this

FormControl
咱们在v层中spa

<label for="name">名称:<input id="name" type="text" [formControl]="name"/></label>

对应c层3d

this.name = new FormControl('');

FormControlname
v层code

<form (ngSubmit)="onSubmit()" [formGroup]="formGroup">  
 <label for="name">姓名:<input id="name" type="text" name="name" formControlName="name" /></label>  
 <label for="sno">学号:<input id="sno" type="text" name="sno" formControlName="sno" /></label>
</form>

对应c层orm

this.formGroup = new FormGroup({  
  name: new FormControl(''),  
  sno: new FormControl('')  
});

这里注意,FormControlname没有加[],与formFroup组合使用。FormControl加了[],由于在对应的c层中有定义name: FormControl;
咱们还能够进行转化
例如blog

<div>
  <input type="text" [formControl]="myForm.controls.name"/>
  <input type="text" [formControl]="myForm.controls.sno"/>
</div>

至关于input

<div [formGroup]="myForm">
  <input type="text" formControlName="name"/>
  <input type="text" formControlName="sno"/>
</div>

结语

头疼了一天的bug居然是因为一个不明因此缘由形成的,bug仍是要具体问题具体分析,

相关文章
相关标签/搜索