![](/img/trans.png)
[英]ViewChild vs Input/Output in Angular, any Disadvantages or capability difference?
[英]Angular Difference ViewChild vs ControlValueAccessor
Angular 中的 ViewChild 和 ControlValueAccessor 有什么區別? 似乎他們都可以訪問子組件、指令、DOM。 對用法的差異如此好奇,一個人可以做其他人不能做的事情嗎?
ControlValueAccesor 用於制作自定義表單控件。
一步一步,FormControl 可以存儲任何東西,甚至是一個對象。 想象兩個不同的 FormGroups
form1=new FormGroup({
name:new FormControl('name')
direcction:new FormControl({address:'address',cp:'cp'})
})
form2=new FormGroup({
name:new FormControl('name')
direction:new FormGroup({
address:new FormControl('address'),
cp:new FormControl('cp')
})
兩者具有相同的“價值”
{name:'name',direction:{address:'adress',cp:'cp'}}
在使用表單數組時,您可以擁有
form1=new FormGroup({
name:new FormControl('name')
direcction:new FormArray([
new FormControl({address:'address1',cp:'cp1'}),
new FormControl({address:'address2',cp:'cp2'})
]
})
form2=new FormGroup({
name:new FormControl('name')
direction:new FormArray([
FormGroup({
address:new FormControl('address1'),
cp:new FormControl('cp1')
}),
FormGroup({
address:new FormControl('address2'),
cp:new FormControl('cp2')
})]
})
再一次,兩者都給出相同的“價值”
{
name:'name',direction:[
{address:'address1',cp:'cp1'},
{address:'address2',cp:'cp2'}]
}
您可以制作自定義表單控件來控制存儲對象的 FormControl,並使用 ControlValueAccessor,但實際上我更喜歡另一種方法(*); 它是一個簡單的組件,並將 formGroup 或 formControl 作為輸入傳遞。 如果你想維護最簡單的東西,不要使用 formControl 來存儲對象。 如果我有一個組件應用程序方向,如
@Input()formGroup
<input [formControl]="formGroup('address')">
<input [formControl]="formGroup('cp')">
您可以用作
<app-direction [formGroup]="myform.get('direcction')"></app-direction>
或者如果你有一個表單數組
<div *ngFor="let group of myForm.get('direction').controls">
<app-direction [formGroup]="group"></app-direction>
</div>
沒有 ViewChild,沒有 ControlValueAccesor,什么都沒有,表單是在 main.component 中創建的。
那么,你的隊友正在使用 ControlValueAccesor 來控制一個對象? 這只是一個意見,但他正在使應用程序復雜化,真的:“使事情變得簡單”,看看其他人如何解決類似的問題,重新發明輪子通常是一個壞主意
(*)我認為應該使用自定義表單控件來制作具有“特殊外觀”的“特殊控件”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.