【发布时间】:2018-02-07 19:04:56
【问题描述】:
我有几个组件应该同时获得三个服务并注入相同的实例。然后我想“生成”我的类的一个新实例,以便再次注入服务并不断地......
我的第一个想法是最好创建一个抽象类并在那里注入所有服务。然后我的任何组件都会扩展抽象类,但这种方法不起作用。
抽象类:
import { Component, Injector } from '@angular/core';
import {GeomqttdataproviderService} from '../protocols/geomqtt/geomqttdataprovider.service';
import {MqttdataproviderService} from '../protocols/mqtt/mqttdataprovider.service';
import {CoapdataproviderService} from '../protocols/coap/coapdataprovider.service';
@Component({
selector: 'app-abstract',
templateUrl: './abstract.component.html',
providers: [
MqttdataproviderService, GeomqttdataproviderService, CoapdataproviderService
],
styleUrls: ['./abstract.component.css']
})
export class AbstractComponent {
protected GeomqttdataproviderService: GeomqttdataproviderService;
protected MqttdataproviderService: MqttdataproviderService;
protected CoapdataproviderService: CoapdataproviderService;
constructor(injector: Injector) {
this.GeomqttdataproviderService = injector.get(GeomqttdataproviderService);
this.MqttdataproviderService = injector.get(MqttdataproviderService);
this.CoapdataproviderService = injector.get(CoapdataproviderService);
}
}
消耗组件之一:
import { Component, OnInit, Injector } from '@angular/core';
import {AbstractComponent} from '../../abstract/abstract.component';
@Component({
selector: 'app-gauge',
templateUrl: './gauge.component.html',
styleUrls: ['./gauge.component.css'],
providers: [
AbstractComponent
],
})
export class GaugeComponent extends AbstractComponent {
temp = [];
data = [
{
name: '',
value: ''
}
];
constructor(injector: Injector) {
super(injector);
this.CoapdataproviderService.msg$.subscribe(() => {
this.temp = [{name: this.CoapdataproviderService.coapform.addcoaptopicfilter, value: this.CoapdataproviderService.msg}];
this.temp = this.data;
this.data = [{name: this.CoapdataproviderService.coapform.addcoaptopicfilter, value: this.CoapdataproviderService.msg.slice(-1)[0] }];
});
this.GeomqttdataproviderService.geomsg$.subscribe(() => {
this.temp = [{name: this.GeomqttdataproviderService.geomqttform.addgeomqtttopicfilter, value: this.GeomqttdataproviderService.geomsg}]; // nur das letzte wird angezeigt
this.temp = this.data;
this.data = [{name: this.GeomqttdataproviderService.geomqttform.addgeomqtttopicfilter, value: this.GeomqttdataproviderService.geomsg.slice(-1)[0] }];
});
this.MqttdataproviderService.msg$.subscribe(() => {
this.temp = [{name: this.MqttdataproviderService.mqttform.addmqtttopicfilter, value: this.MqttdataproviderService.msg}];
this.temp = this.data;
this.data = [{name: this.MqttdataproviderService.mqttform.addmqtttopicfilter, value: this.MqttdataproviderService.msg.slice(-1)[0] }];
});
}}
我总是收到我的所有服务都在仪表组件中丢失的错误。但我不想在 app.module 中声明它们,因为每次我在所有组件中注入抽象类时都需要一个新实例。
【问题讨论】:
标签: angular typescript