簡體   English   中英

如何使用 Angular 6/7 將服務注入另一個服務? (providedIn: 'root') 服務總是未定義的

[英]How to inject service into an another service with Angular 6/7 ? (providedIn: 'root') Service is always undefined

使用providedIn: "root"注入另一個服務時,服務保持未定義

我試圖放入模塊和/或組件: providers: [service1, service2]並刪除providedIn: "root" ,但它仍然無法正常工作。

    @Injectable({
        providedIn: 'root'
    })
    export class Service1 {
       constructor() {}
    }

    @Injectable({
        providedIn: 'root'
    })
    export class Service2 {
        constructor(private service1: Service1) {
            console.log(service1) // undefined
        }
     }

     export class Component {
         constructor(private service2: Service2) {}
     }

服務 1 始終未定義

這是一個很好的問題,答案是:

這取決於執行順序

如果在service1之前定義service2,則會拋出錯誤,因此訂單很重要

代碼段

響應

服務是在根目錄中提供的,它不“依賴”,因為它們都是在根目錄中“定義”的,因此沒有之前或之后。 Angular 只是首先創建要注入的服務,否則 Angulars DI 將不起作用。 它通常建議在根范圍內提供服務。 “您應該始終在根注入器中提供您的服務,除非您希望服務僅在消費者導入特定的 @NgModule 時才可用。” https:\/\/angular.io\/guide\/providers#provider-scope<\/a> )演示: https<\/a> :\/\/stackblitz.com\/edit\/angular-ivy-e4onjc?file=src\/app\/app.component.ts

"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM