2017-05-06 214 views
2

我有這樣簡單的打字原稿類別:類和計算的屬性

customer.ts
export class Customer { 

    public idCustomer: number; 
    public Code: string; 
    public BusinessName: string; 

    public sValue: any; 
    public sTitle: string; 

    constructor(values: Object = {}) { 
     Object.assign(this, values); 
    } 

} 

第一3個特性(idCustomer,編碼,BUSINESSNAME)從響應的WebAPI或者由應用程序代碼增值的。

我要的是,每次這3點屬性的變化值,S值的ANS sTitle這個公式得到更新:

sValue = idCustomer 
sTitle = BusinessName + ' (cod:' + Code + ')'; 

什麼是正確的方法來修改,以實現它的類?

更新1

現在我已經實現的get/set方法,和他們的作品,如果我實例化一個新的客戶類,並更改值

export class Customer { 

    //public idCustomer: number; 
    //public Code: string; 
    //public BusinessName: string; 
    private _idCustomer: number; 
    get idCustomer():number { 
     return this._idCustomer; 
    } 
    set idCustomer(newIdCustomer: number) 
    { 
     this._idCustomer = newIdCustomer; 
     this.sValue = this.idCustomer; 
    } 

    private _Code: string; 
    get Code(): string { 
     return this._Code; 
    } 
    set Code(newCode: string) { 
     this._Code = newCode;   
     this.sTitle = '(Cod:' + this._Code + ') ' + this._BusinessName; 
     alert(); 
    } 

    private _BusinessName: string; 
    get BusinessName(): string { 
     return this._BusinessName; 
    } 
    set BusinessName(newBusinessName: string) { 
     this._BusinessName = newBusinessName; 
     this.sTitle = '(Cod:' + this._Code + ') ' + this._BusinessName; 
    } 


    public sValue: any; 
    public sTitle: string; 

    constructor(values: Object = {}) { 
     Object.assign(this, values);   
    } 

} 

但在這一刻是來自於價值觀WebApi映射/訂閱只傳遞3個屬性(idCustomer,Code,Business Name)sValue和sTitle沒有更新...

我認爲我也修改了構造函數,但我不知道如何去做...

感謝

+2

使他們成爲方法或獲得者。 –

+0

我怎樣才能讓他成爲獲得者? – DarioN1

+0

好的,我提前了一步,我整合了問題 – DarioN1

回答

2

您可以修改你的構造例如爲:

constructor(values: { id: number, code: string, business: string }) { 
    this.idCustomer = values.id; 
    this.Code = values.code; 
    this.BusinessName = values.business; 
} 

將打電話給你的制定者,從而確保您的私有成員的計算。

當然基於使用的webapi,如果可能有些參數不存在,您可以使用可選參數修改接口。

+0

所以我認爲它更好地實現一個接口之前,否則我會得到一些麻煩與映射/下標是不是? – DarioN1

+2

@ DarioN1注意到,如果你只是爲sValue和sTitle定義了兩個getter,並且將所有其他字段都作爲公共字段,則不需要任何東西:'get sValue(){return this.idCustomer; }'和'get sTitle(){return'(Cod:'+ this._Code +')'+ this.BusinessName; }' –