我是 Angular2 的新手,我有两个服务 DefaultService
和 SpecialService
应该根据组件状态交替使用
我不知道我是否可以将单例注入(inject)到我的组件中 GeneralService
以某种方式表现得像DefaultService
或 SpecialService
通过改变它的实现。
我有另一个想法在 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();
}
}
假设SpecialService
和 DefaultService
延伸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/