2017-10-19 68 views
1

以下Angular docs,HttpClient被注入app組件。我在另一位導遊看到,這是一個「有利的」,沒有解釋。角4:注入HttpClient的優勢是什麼

@Component(...) 
export class MyComponent implements OnInit { 

    results: string[]; 

    // Inject HttpClient into your component or service. 
    constructor(private http: HttpClient) {} 

    ngOnInit(): void { 
    // Make the HTTP request: 
    this.http.get('/api/items').subscribe(data => { 
     // Read the result field from the JSON response. 
     this.results = data['results']; 
    }); 
    } 
} 

在此我有一些問題:

1) Where/How is the HttpClient actually instantiated? Does `ng serve` handle this? 
2) How could I inject a different instance if I needed to? 
+0

'我上的另一個導向看到,這是一個「有利的」,而不explanation' <=請提供源。也許你誤解了,這對'http'有利,因爲'http'將被棄用。 – Igor

+0

關於2,請參閱https://stackoverflow.com/questions/38213995/angular2-di-initializing-multiple-different-instances-in-the-same-constructor。由於它的設計方式,你將很難用HttpClient做這件事。通常使用一個HttpClient實例。 – estus

+0

關於#2,請參見[依賴注入 - 何時使用NgModule與應用程序組件](https://angular.io/guide/dependency-injection#when-to-use-ng- module-versus-an-application-component )。您可以在組件中指定提供程序,併爲該組件提供新的實例,並且它是子組件。 –

回答

1

其實,HttpClient的是HTTP改進的替代品。他們期望在Angular 5中棄用Http並在更高版本中將其刪除。

還是你想知道爲什麼注射它是「有利的」?你注入服務。這就是服務在Angular中的工作原理。

與Http服務一樣,HttpClient服務在加載導入Http的模塊時實例化。

預計此服務只有一個實例。我不確定爲什麼你會想要不止一個?

2

當你想使用一個服務(基本上是一個TS類),你需要首先實例化它。那是角形噴油器自動爲你做的。

這種方法是「有利的」,因爲它會自動查找在其構造函數中定義的服務依賴項。

不確定第二個問題 - 如果要注入同一類(服務)的另一個實例,則必須手動完成。關於角度依賴性注入

更多信息可以在他們的文檔中找到:以ng 4.3+

https://angular.io/guide/dependency-injection

+0

謝謝。關於第二個問題,我想我只是好奇,如果有些情況我們不希望棱角分明的處理所有問題。這些文檔很有幫助,謝謝 –

1

的HttpClient/HttpClientModule引入是重新執行HTTP/HTTP模塊的。要提到一個示例功能,您可以將返回的結果轉換爲用戶定義的接口,以便在其中控制結果/錯誤,而不是將GET結果映射到JSON,然後挖掘可能存在或不存在的屬性。作爲一個例子,在你更新你的cli和npm之後,製作一個像圖像那樣的項目,並在瀏覽器中看到標題!在你的界面中看到,你可以挑選你想要映射的東西。

enter image description here

+1

這非常有幫助!我嘗試過使用HttpClient和泛型的其他示例,但無法從數組結果中獲取數據,但訂閱之後的forEach可以完成這項工作。這工作! – user2748659