2015-11-29 91 views
4

我試圖在另一個使用的角2進樣服務角2

import {HttpService} from 'scripts/httpService'; 
export class CurrentBlog{ 
    constructor(public httpService:HttpService){} 
} 

DI注入一個服務。當我這樣做,我得到這個錯誤:

無法解決所有參數CurrentBlog(?)。確保他們都有有效的類型或註釋。

我已經用正常的組件測試過DI,它工作正常。 但是,當我注入服務。它根本不起作用。

回答

0

在這種情況下,只是DI是不夠的。下面這個鏈接地址同樣的問題:

http://blog.thoughtram.io/angular/2015/09/17/resolve-service-dependencies-in-angular-2.html

所以它說:當emitDecoratorMetadata選項設置

打字稿生成的元數據。但是,這並不意味着它會爲我們的代碼的每個類或每個方法盲目地生成元數據。當裝飾器實際附加到特定代碼時,TypeScript僅爲類,方法,屬性或方法/構造器參數生成元數據。否則,會生成大量未使用的元數據代碼,這不僅會影響文件大小,還會影響我們的應用程序運行時。

所以執行Metadta代,我們可以嘗試將以下兩個註釋之一:

import {HttpService} from 'scripts/httpService'; 
import {Inject} from 'angular2/core'; 
export class CurrentBlog{ 

constructor(@Inject(HttpService) public httpService:HttpService){} 
} 

或者,

import {Injectable} from 'angular2/core'; 
import {HttpService} from 'scripts/httpService'; 
@Injectable() 
export class CurrentBlog{ 

constructor(public httpService:HttpService){} 
} 
+0

這不是工作,因爲那時Angular2會抱怨'爲HttpService的沒有提供!'。 – budhajeewa

+0

是的,這不會工作 –

1

在角2,你需要做的角度噴射器知道你的服務。爲此,您需要將該服務標記爲Injectable。

HttpService的

import {Injectable} from 'angular2/angular2'; 

@Injectable() 
export class HttpService{ 
    ... 
} 

CurrentBlog

import {HttpService} from 'scripts/httpService'; 
import {Inject} from 'angular2/core'; 

export class CurrentBlog{ 

    constructor(public httpService:HttpService){} 
}