我正在使用Angular 2,Typescript,Visual Studio 2015。
在角度1中,我写了一个记录器,它记录到控制台,一旦http可用,它也会将某些日志发送到webapi后端。我使用了配置和运行阶段来设置http服务。日志服务一旦设置就会使用它。
在Angular 2中,配置和运行已经消失,我对如何完成同样的事情感到困惑。我目前得到循环依赖性错误,正如人们所期望的那样。我基本上不能重复以前的功能吗?我在后来使用ReflectiveInjector来检索Http,但是在必须引用它所需要的每个依赖项时都有问题。
我会想象这样的事情:
@Injectable()
export class MyLogService implements ILogService {
public httpService: MyHttpWrapper = null;
constructor(paramAService: AService
) {...}
public info(message: string) {
//once http is set the logger will actually send the message as well
if (this.httpService != null){
this.httpService.post("logurl", message);
}
console.info(message);
}
@Injectable()
export class MyHttpWrapper extends Http {
constructor(paramLogService: MyLogService
) {
paramLogService.info("my http service did something...") ;
...
有没有办法让我的日志服务稍后在Angular 2中获取我的Http包装器的实例,就像我在Angular 1中那样?
我希望Http包装器能够记录,并且日志服务能够在http完全配置后通过http发送其日志。这对于Angular 1来说效果很好。我把它看作是对日志服务的延迟依赖使用的部分即。在http准备就绪并且已经设置之前,它实际上不会使用http。
答案 0 :(得分:0)
您可以尝试使用forwardRef来注入http依赖项吗?在<li *ngIf="item.type === type_A">
<img src="assets/images/typeA-icons.png"/>
</li>
<li *ngIf="item.type === type_B">
<img src="assets/images/typeB-icons.png"/>
</li>
<li *ngIf="item.type === unspecified">
<img src="assets/images/unspecified-icons.png"/>
</li>
注入MyLogService
中
http
我没有测试过这个。
答案 1 :(得分:0)
你需要打破这个循环。 这是一个对我有用的解决方法。
def trade(date, close, MA):#, port):
#d = {'Data': close}
#test_log = test_log.append(d, ignore_index=True)
if MA < close and port['coin'] == 0 :
coins_bought = port['BTC']/MA
port['BTC'] = 0
port['coin'] = coins_bought
d = {'Date':date, 'type':'buy', 'coin_value': port['coin'], 'btc_value':port['BTC']}
data_list.append(d)
#return pd.Series(d)
elif MA > close and port['BTC'] == 0 :
coins_sold = port['coin']*MA
port['coin'] = 0
port['BTC'] = coins_sold
d = {'Date':date, 'type':'sell', 'coin_value': port['coin'], 'btc_value':port['BTC']}
data_list.append(d)
#return pd.Series(d)
df.apply(lambda x: trade(x['date'], x['close'], x['MA']), axis=1)
log = log.dropna()
for key,value in port.items():
print(key, value )
log.from_dict(data_list)
答案 2 :(得分:0)
这最近对我有用;
constructor( private injector: Injector ) {
/** code */
}
public get yourService(): YourService {
return this.injector.get( YourService );
}
然后只需将您的服务用作this.yourService.method();