我正在创建一个商店站点。
在创建产品注册表格的阶段,我有些困惑,我需要帮助。
首先,我将为产品注册建立一个数据库:
ProductDetail:,它已提交3个:
id:number;
catId:number;
infoNames:Detail[];
CatId:
(类别ID)。
infoNames :
代表信息名称,例如Size , Monitor , CPU , . . .
例如:我必须添加移动设备信息:我必须选择移动设备CatId
并添加InfoName
,例如Ram , GPU , . . .
并像这样插入数据库中:Table:id - catId - infoName
=> 1 - 8 - CPU
,2 - 8 - GPU
,
3 - 8 - Ram
nextTable ProductInfoValue:,它具有34个字段:
id:number;
productId:number;
ProductDetailId:number;
InfoValue:string;
productId
指定此值特定于此产品
ProductDetailId
此值是有关此产品的信息
InfoValue
信息价值
例如:我必须添加移动设备的信息值:Ram =8
,GPU = 2
,. . .
将此信息添加到这样的数据库中:1 - 1 - 2 - 8 core
,2 - 2 - Nvidia
,. . .
我有产品表格。
现在我需要创建一个在选择产品时显示的表单,产品信息表单会出现(我做到了),但是我的问题在这里:
我不知道为产品信息保存的值应该与表中的ProductDetail
有关。
我应该以什么方式设计一种存储产品信息的表格?
1 - 1 - 2 - 8Qure
:1 => id
,1 => productId
,2 => ProductDetailId
,8 core => Value
这是我创建的表单:
HTML:
<div class="form-inline lbin">
<label>Category: </label>
<select (change)="ChangeSubCat($event.target.value)" >
<option *ngFor="let cat of cats" [value]="cat.id">{{cat.pFaName}}</option>
</select>
</div>
<div class="form-inline lbin">
<label>Product Type: </label>
<select (change)="ChangeFormByType($event.target.value)">
<option *ngFor="let sub of subCats" [value]="sub.id">{{sub.pFaName}}</option>
</select>
</div>
<div *ngFor="let infoName of PD" class="form-inline lbin">
<label>{{infoName.inofName}} </label>
<input >
</div>
和 TS:
addProductFG:FormGroup;
cats:Category[];
subCats:Category[];
PD:Productdetail[];
selectedCat:number;
infoNameList:FormArray;
public loading=false;
constructor(private fb:FormBuilder,private productService:ProductinfoService,private catService:CategoryService) { }
ngOnInit() {
this.loading=true;
this.InitialFrom();
this.GetMainCat();
}
public GetMainCat(){
this.catService.GetMainCat().subscribe(
res=>{
this.cats=res;
this.loading=false;
}
)
}
public InitialFrom():FormGroup{
this.addProductFG=this.fb.group({
productTitle:['',Validators.compose([Validators.required])],
productName:['',Validators.compose([Validators.required])],
color:['',Validators.compose([Validators.required])],
productImageName:['',Validators.compose([Validators.required])],
price:['',Validators.compose([Validators.required])],
gurantyMonth:['',Validators.compose([Validators.required])],
gurantyCompanyName:['',Validators.compose([Validators.required])]
})
return this.addProductFG;
}
public ChangeSubCat(id:number){
this.loading=true;
this.catService.GetSubCatByCatId(id).subscribe(
res=>{
this.subCats=res;
this.loading=false;
}
)
}
public ChangeFormByType(id:number){
this.loading=true;
this.productService.GetPCIBySubId(id).subscribe(
res=>{
this.PD=res,
this.loading=false;
}
)
}
}