關於subscribe service 問題

以下是我的code:

export class RosterTableComponent implements OnInit {
rosterRule: RosterRule
constructor(private calendarService: CalendarService,private rosterService: RosterService) {
this.rosterService.getRosterRule().subscribe((res: RosterRule) => {
this.rosterRule=res;
this.rosterRule.add(); // <==問題出在這裡
});
}

因為這個RosterRule Object 本身有自己的method(e.g. add), 可是當我call this.rosterRule.add 時,browser 就說沒有add這個method, 請問為什麼呢?

暫時我用以下方法去解決:

this.rosterService.getRosterRule().subscribe((res: RosterRule) => {
this.rosterRule = new RosterRule();
this.rosterRule.essentialShiftList = res.essentialShiftList;
this.rosterRule.maxConsecutiveWorkingDay = res.maxConsecutiveWorkingDay;
this.rosterRule.shiftHourCount = res.shiftHourCount;
this.rosterRule.shiftTimeSlot = res.shiftTimeSlot;
this.rosterRule.shiftCssClassName = res.shiftCssClassName;
this.rosterRule.add(); //<=這樣就沒問題了
});

你的 res 回傳回來是怎樣的東西? 看起來不是物件本身才對
而 add() 是一個 method, 通常不會出現在 api 回傳的物件中. 這種情形都會使用利用類似第二種的做法沒做,但會寫一個類似工廠模式的東西處理

對! 回傳回來只是attribute to value pair而己,至於工廠模式是不是將回傳回來JSON 傳入一個function,而這個function 就return RosterRule object 呢?

yes, 簡單的說,就是將你第二段的程式碼變成一個 function, 然後回傳一個物件供後續操作