角度2循环依赖误差解决方案相当于Angular 1解决方案?

时间:2017-02-01 15:51:33

标签: angular typescript2.0

我正在使用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。

3 个答案:

答案 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();