使用变量名访问服务、模型、



我有一个应用程序,使用多个类别。其中两个是"太阳能电池板"。和"inverters".

在名为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')
); 

其中"Selected…"我们是SolarpanelService还是InverterService还是....等等等等等等……

基本上,我想将变量名称强制转换为一个字符串,然后用于访问正确的东西。我认为这是一个很渺茫的机会,但也许这是可能的,或者也许有另一种完全不同的方式来做这些事情。

提前感谢!

您可以使用对象作为字典来查找您的服务或它们的函数,就像您可以使用字典来查找从键到值的任何类型的映射一样:

const serviceMap = {
"solarpanel": SolarPanelService.getSolarPanel,
"inverters": InverterService.getInverter
}
let lookupFunction = serviceMap[selected]
lookupFunction().subscribe(
...
)

最新更新