gpt4 book ai didi

angular - 如何动态更改 Angular 服务实现?

转载 作者:太空狗 更新时间:2023-10-29 18:25:39 25 4
gpt4 key购买 nike

我是 Angular2 的新手,我有两个服务 DefaultServiceSpecialService应该根据组件状态交替使用我不知道我是否可以将单例注入(inject)到我的组件中 GeneralService以某种方式表现得像DefaultServiceSpecialService通过改变它的实现。

我有另一个想法在 generalService 中注入(inject)这两个服务并将它们的方法委托(delegate)给适当的服务。

感谢告诉我如何实现第一个想法(如果可行),或者建议我其他想法。

@Component({
selector: 'my-app',
templateUrl : './content.component.html'
})
export class AppComponent {
constructor(generalService : GenralService,injector : Injectot){}
@ViewChild(MySon)
private mySon : MySon;
state : State;

onChangeState(newState : State):void{
if(state = special)
//this.generalService = this.injector.get('SpecialService');
myson.updateplease();
}
}

假设SpecialServiceDefaultService延伸GeneralService

最佳答案

您的第一个想法是完全可能的(如果我理解正确的话)。这个想法是将 GeneralService 创建为一个接口(interface),然后创建两个从该接口(interface)继承并实现其功能的服务。然后,通过 injector,您可以获得对您想要的那个的引用。

看看这个 plunker:http://plnkr.co/edit/rjghCDkc5jUjp1SSpjDK

只需将此处的 false 更改为 true 即可:

if (false)
{
this.service = this.injector.get(SpecialService);
}
else
{
this.service = this.injector.get(DefaultService);
}

查看“控制台”中记录的值是否发生变化。我将初始化放在 ngOnInit 中,但您可以在任何地方进行初始化 ;-)

关于angular - 如何动态更改 Angular 服务实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42698697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com