我想为组件创建一个基类,以便能够在组件的生命周期中执行一些常见操作。我还需要基类来访问某些服务。我怎么注射它?当然,我可以使用单身而不是服务,但是我认为,即使不是俗名,也不会有很大的角度,因为单身人士在那里是反模式。 映入眼帘, 丹尼尔
修改
这是目前正在运行的,但我更希望将ConnectionService @Injectable()并将其注入到RemoteController的构造函数中,如Angular2文档所说,最好不必将其添加到子组件提供程序列表。
子组件:
@Component(...)
export class SomeComponent extends RemoteController {
sendRequest() {
this.request('something');
}
}
基类:
export class RemoteController implements OnInit {
public connection: SocketIOClient.Socket;
constructor() {
this.connection = RemoteService.connect('ws://localhost:8500');
}
request(name: string) {
this.connection.emit('request', name);
}
ngOnInit() {
...
}
}
Singleton解决方案:
class ConnectionService {
private sockets: { [key: string]: SocketIOClient.Socket };
constructor() {
debugger;
this.sockets = {};
}
connect(url: string) {
return (url in this.sockets) ? this.sockets[url] : io.connect(url);
}
}
let RemoteService = new ConnectionService();
export { RemoteService };
答案 0 :(得分:1)
Angular2仅支持构造函数注入。如果你有一个超类和一个子类,并且想要注入超类,你必须将构造函数参数添加到子类并将其转发给子类
export class RemoteController implements OnInit {
constructor(public connection: SocketIOClient.Socket) {
this.connection = RemoteService.connect('ws://localhost:8500');
}
@Component(...)
export class SomeComponent extends RemoteController {
constructor(connection: SocketIOClient.Socket) {
super(connection