2016-01-22 36 views
1

我有一個API類:不含http角2類在構造參數

export class ApiService { 

    constructor(public http: Http) { } 

    put(controller: string, method: string, data: Object) { 

    return this.http.put("http://127.0.0.1:8000", 
     JSON.stringify(data), { 
     }) 

    .map(res => res.json()) 

    .catch(err => { 
     return Observable.throw(err.json()); 
    }); 

    } 

} 

和的AccountService類:

export class AccountService { 

    api: ApiService; 

    constructor() { 
    this.api = new ApiService(); 
    } 

    login(username: string, password: string) { 

    return this.api.put("accounts", "login", { username: username, password: password}); 

    } 

} 

然而,當我運行這個例子中有兩個問題:

1)ApiService在構造函數中需要http。因此this.api = new ApiService();應該提供Http這不是我想要的。

如何修改ApiService,因此我不必向構造函數提供Http

2)在AccountServicethis.api.put方法在ApiService找不到。其中,因爲我實例化的ApiServicethis.api

+0

這是完全不清楚你試圖完成什麼。如果你需要'Http'來發出請求,那麼你怎麼真的希望它傳遞給'ApiService'?你爲什麼不想讓'Http'被DI傳遞? –

+0

完全清楚他想要什麼。我自己也有同樣的問題。 –

回答

2

事實上,你可以得到實例的ApiServiceAccountService一個通過依賴注入我不明白:

export class AccountService { 
    constructor(private api: ApiService) { 
    } 
} 

您只需註冊這兩個服務:

bootstrap(AppComponent, [AccountService, ApiService]); 

否則我看不出有任何理由,你爲什麼不能從使用ApiServiceput方法。

希望它可以幫助你, 蒂埃裏

+0

好吧,但以這種方式,我結束了一個數百個服務註冊。我使用'UpgradeAdapter'引導程序看起來像這樣:'adapter.bootstrap(document.body,[「app」]);'我試圖將它作爲提供程序添加,但AccountService沒有看到ApiService。謝謝! –

+0

在這種情況下,您應該嘗試使用'adapter.addProvider'方法。我認爲可以直接提供一系列提供程序而不是單個提供程序(請參閱https://plnkr.co/edit/PRFgtXaCVEHGc1PSDbdc?p=info)。這是Angular2本身提供提供者的方式(例如HTTP_PROVIDERS,ROUTER_PROVIDERS)。 –

+0

它似乎工作!:)但只有當我用提供者添加它並使用AccountService中的「./ApiService」;'import {ApiService};。爲什麼都需要?有什麼想法嗎? –

相關問題