我有一個使用多個類別的應用程式。其中兩個是“太陽能電池板”和“逆變器”。
在一個名為 stockitems 的組件中,我有一個表格,其中列出了所選類別的產品。
<ul class="list-group">
<li class="list-group-item d-flex justify-content-between align-items-center" *ngFor ="let stockitem of stockitems">
{{stockitem.name}}
<span class="badge bg-primary rounded-pill">X</span>
</li>
</ul>
訪問組件時,我知道用戶選擇了哪個類別,但是為了填充生成表格內容的陣列“stockitems”,我使用了“SolarpanelService”或“Inverterservice”之類的服務。現在要決定訪問哪個服務,我使用 switch/case-block :
switch(this.category)
{
case "solarpanels" :
this.SolarpanelService.getSolarpanel().subscribe(
(response :Solarpanel[]) => {
this.stockitems = response;
},
(error) => console.log('Error'),
() => console.log('ready')
);
break;
....
現在這可行,但我想知道我是否可以真正壓縮代碼,這樣我就不必撰寫 n 個案例塊了。換句話說,我想要一個代碼塊,根據所選類別訪問正確的服務、方法和模型,例如:
this."SelectedService".get"SelectedMethod"().subscribe(
(response :"SelectedModel"[]) => {
this.stockitems = response;
},
(error) => console.log('Error'),
() => console.log('ready')
);
我們將在哪里選擇 SolarpanelService 或 InverterService 或 .... etc etc etc ...
基本上我想將一個變數名轉換為一個字串,然后用于訪問正確的東西。我認為這是一個很長的機會,但也許這是可能的,或者也許有另一種方式來做這些事情。
提前致謝 !
uj5u.com熱心網友回復:
您可以將物件用作字典來查找您的服務或其功能,因為您可以將字典用于從鍵到值的任何型別的映射:
const serviceMap = {
"solarpanel": SolarPanelService.getSolarPanel,
"inverters": InverterService.getInverter
}
let lookupFunction = serviceMap[selected]
lookupFunction().subscribe(
...
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/475396.html
