首页 > 解决方案 > 在模型中直接映射 Reactive FormGroup 中的类对象、Setvalue 和 getvalue

问题描述

我是角度的新手。我正在开发一个企业应用程序。在应用程序中有很多模型,其中包含 50 到 100 多个属性。对于许多属性,我必须根据某些标准在其他属性中设置值。

如果我使用 FormGroup 对象的 Angular ValueChanges 属性并使用相应 FormControl 的 getValue 和 setValue 方法,那么代码会因为模型中的 100 多个属性(包括子对象和数组对象)而变得混乱。

我想根据我的模型绑定响应式表单,当我更改 HTMLControl(文本框、下拉菜单等)中的值时,getter 和 setter 属性将被调用。如果我更改模型属性的任何值,那么更改将自动反映在屏幕上。

为什么我需要上述解决方案?

主要原因是它会减少代码大小,我不需要为每个属性订阅和 getValue/setValue 方法。也很容易维护代码。

有没有可能实现这一目标?

我的项目模型之一:

export class Client {
    constructor()  {
    }

    _clnAbn:string;
        set clnAbn (value: string ){
            if(value == "xyz")
            this.clnAbnBranchNumber = "123";
            else
            this.clnAbnBranchNumber = "456";
        this._clnAbn = value;
        }

        get clnAbn(){
            return this._clnAbn;
        }

    clnAbnBranchNumber : string  ;
    clnAcn : string  ;
    clnActive : string  ;
    clnAddressLine1 : string  ;
    clnAddressLine2 : string  ;
    clnAward : string  ;
    clnBankKey : number ;
    clnBankAccountName : string  ;
    clnBankAccountNumber : string  ;
    clnBankBranch : string  ;
    clnBankBsb : string  ;
    clnBatchTimeSheets : string  ;
    clnCategory : string  ;
    clnClientName : string  ;
    clnCOnSolidATEInvoiceByContact : string  ;
    clnConsultantKey : number ;
    clnContactNotes : string  ;
    clnCreatedby : string  ;
    clnCreationDate : Date ;
    clnCreditCardDetails : string  ;
    clnDebtorCreditCard : string  ;
    clnDirectDebit : string  ;
    clnDirectDebitLimit : number ;
    clnDivision : string  ;
    clnDonotSendSms : string  ;
    clnEmail : string  ;
    clnEmailInvoice : string  ;
    clnEmailInvoiceToSupervisor : string  ;
    clnFaxNumber : string  ;
    clnGlJobNumber : string  ;
    clnHearDFrom : number ;
    clnHiringOrderNumber : string  ;
    clnId : number  ;
    clnIndustry : string  ;
    clnInterestOnInvoices : string  ;
    clnInterestPeriod : number ;
    clnInterestTax : string  ;
    clnInvoiceAttentionTo : string  ;
    clnInvoiced : string  ;
    clnInvoiceDailyTotals : string  ;
    clnLargeSizeBusiness : string  ;
    clnLastChanged : Date ;
    clnMediumSizeBusiness : string  ;
    clnMobileNumber : string  ;
    clnMotorCharge : string  ;
    clnNotes : string  ;
    clnOtsRegistered : string  ;
    clnPassword : string  ;
    clnPayEmployeeTax : string  ;
    clnPayEmployeeWages : string  ;
    clnPayGContactName : string  ;
    clnPaygFbtExempt : string  ;
    clnPayGGroupNumber : string  ;
    clnPayGOrganisationName : string  ;
    clnPayGSupplierNumber : string  ;
    clnPaymentTermsKey : number ;
    clnPaymentTermsRate : number ;
    clnPayRollTax : string  ;
    clnPhoneNumber : string  ;
    clnPostalAddressLine1 : string  ;
    clnPostalAddressLine2 : string  ;
    clnPostalPostCode : string  ;
    clnPostalState : string  ;
    clnPostalSuburb : string  ;
    clnPostCode : string  ;
    clnProspective : string  ;
    clnPublicSector : string  ;
    clnReceiveSFunding : string  ;
    clnRegistrationFormDate : Date ;
    clnRegistrationFormReceived : string  ;
    clnRetired : string  ;
    clnShowSupervisorOnInvoice : string  ;
    clnSignupDate : Date ;
    clnSingleInvoice : string  ;
    clnSmallBusiness : string  ;
    clnState : string  ;
    clnSuburb : string  ;
    clnSummaryCompanyKey : number ;
    clnSuperFund : string  ;
    clnTaxOnInvoice : string  ;
    clnTaxRebateKey : number ;
    clnTimeSheetNotes : string  ;
    clnTrade : string  ;
    clnTradingName : string  ;
    clnUpdatedBy : string  ;
    clnUSEPostalAddress : string  ;
    clnUserAwardInterpreter : string  ;
    clnUserEmittanceAddress : string  ;
    clnUserOLLingBilling : string  ;
    clnUserReference : string  ;
    clnUserStatusKey : number ;
    clnVendorNumber : string  ;
    clnWebsite : string  ;
    clnWhsStage3ConsultantKey : number ;
    clnWhsStage4ConsultantKey : number ;
    clnWhsThirdPartYSites : string  ;
    clnWorkCoverIndustryCode : string  ;
    clnWorkCoverRate : number ;

    hirings: Hiring[];
    timeSheets: TimeSheet[];
    employeeReportCards: EmployeeReportCard[];
    invoiceHistory: InvoiceHistory[];
    invoices: Invoice[];
    clientWhsStageOne: ClientWhsStageOne[];
    clientWhsStageTWo: ClientWhsStageTWo[];
    employeeTerminations: EmployeeTermination[];
    clientCorrspout: ClientCorrspout[];
    clientEbaAwards: ClientEbaAward[];
    clientCategories: ClientCategory[];
    clientContacts: ClientContact[];
    clientCorrspin: ClientCorrspin[];
    timeSheetHistory: TimeSheetHistory[];
    clientWhsStageFour: ClientWhsStageFour[];
    clientWhsStageThree: ClientWhsStageThree[];
    clientCustomFields: ClientCustomField[];
    clientContactNotes: ClientContactNote[];
    clientOhsFormTracking: ClientOhsFormTracking[];
    employeeInductions: EmployeeInduction[];
    clientSuperAccounts: ClientSuperAccount[];
    employeesuperEntitlements: EmployeesuperEntitlement[];

    ccgCategoryKey : string ;
    clnSummaryCompanyKeyValue : string ;
    clnConsultantKeyValue : string ;
    clnPaymentTermsKeyValue : string ;
    clnUserStatusKeyValue : string ;
    clnUserStatusKeyColorValue : string ;
    clnHeardFromKeyValue : string ;
    clnWorkCoverIndustryKeyValue : string ;
    clnDuePeriodKeyValue : string ;
    clnBankKeyValue : string ;
    clnAccountCategoryKeyValue : string ;
    wICrate : string ;
    clnInterestPeriodKeyValue : string ;
    primaryContactKeyValue : string ;
    primaryContactKey : string ;
}

标签: angular

解决方案


推荐阅读