Я хочу создать базовый класс для компонентов, чтобы иметь возможность делать что-то общее в течение жизненного цикла компонентов. Мне также нужен базовый класс для доступа к некоторой службе. Как это сделать? Конечно, я могу использовать синглтон вместо службы, но это было бы не очень угловато, даже если бы не набирать текст, я полагаю, так как синглтоны являются анти-шаблонами. здоровается, DanielInjecting Angular2 Service в базовый класс компонентов
EDIT:
Это то, что в настоящее время работает, но я скорее ожидал, чтобы сделать 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() {
...
}
}
одноэлементных Решение:
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 };
Это было определенно не то, что я хотел услышать. Я также немного прочитал о программной инъекции через ReflectiveInjector, но я не получил его, чтобы работать нормально. Я буду исследовать немного больше, прежде чем принять этот неудовлетворительный ответ (спасибо в любом случае Günter) – Daniel
Вам все равно нужно вводить инжектор приложения, если вы используете 'ReflectveInjector'. Я написал несколько ответов с примером кода. Я бы даже не пытался обойтись, я не думаю, что это будет хорошо. –
важно * не * добавлять «общедоступные», «частные» или «защищенные» в базовые классы конструкторов, иначе вы столкнетесь с конфликтом. Пример правильно не включает их, но я все равно их включал, пока не понял. – vt5491