我有2个下拉作为Facility / Client和Master Plan代码。
在添加到列表之前,请帮我过滤对象数组。
但是:ぁzxswい
TS:
DEMO
假设有这些变化,它将按您的需要工作。 addPlanCode() {
let planCodeData = this.planCodeMappingFormBuilder.value;
const jsonObj = {
// FieldValue: this.facilityId,
IsPayerOffice: 1,
planCodeExtensionID: 0,
facilityCode: planCodeData.FacilityCode == "" ? null : planCodeData.FacilityCode,
facilityName: planCodeData.FacilityCode == "*" ? "All" : this.facilities.filter(x=>x.facilityCode == planCodeData.FacilityCode)[0].facilityName,
planCode: planCodeData.PlanCode,
FieldType: "PO",
};
this.planCodeList.push(jsonObj);
}
public clear() {
this.planCodeMappingFormBuilder = this.formbuilder.group({
'FieldValue': [''],
'FacilityCode': ['', Validators.required],
'PlanCode': ['', Validators.required],
'planCodeExtensionID': ['']
})
}
deletePlanCode(planCodeList, index: any) {
this.planCodeList.splice(index, 1);
if (planCodeList.planCode) {
this.deletedPlanCodeList.push(planCodeList);
}
}
1.对于过滤列表,我在组件方法中附加,selectCitList中的项目选择元素中的过滤选项,其中facilityName =='All'和facilityName与Form中的名称相同:
StackBlitz
在html模板中:
/** Returns the filtered Master Plan Code list for select element */
getFilteredPlans() {
let formValue = this.planCodeMappingFormBuilder.value;
let sameCodes = this.planCodeList.filter(x => x.facilityCode == formValue.FacilityCode);
let allCodes = this.planCodeList.filter(x => x.facilityName == 'All');
if (sameCodes.length > 0 || allCodes.length > 0) {
let samePlanCodes = sameCodes.map(x => x.planCode);
let sameAllCodes = allCodes.map(x => x.planCode);
let filtered = this.planCode.filter(x => samePlanCodes.findIndex(y => y == x.planCode) < 0);
filtered = filtered.filter(x => sameAllCodes.findIndex(y => y == x.planCode) < 0);
return filtered;
}
else
return this.planCode;
}
<option *ngFor="let planCode of getFilteredPlans()" [value]="planCode.planCode">{{planCode.defaultPayerName}}{{" "}}({{planCode.planCode}})</option>