เมื่อสร้างเซอร์วิสใน Angular CLI จะเป็นการเพิ่มข้อมูลเมตาพิเศษด้วยคุณสมบัติ "ให้ไว้ใน" โดยมีค่าเริ่มต้นเป็น "root" สำหรับตัวตกแต่งแบบ Injectable
@Injectable({
providedIn: 'root',
})
สิ่งที่ให้ไว้ในทำคืออะไร? ฉันสมมติว่านี่เป็นการทำให้บริการพร้อมใช้งานเหมือนบริการซิงเกิลตัน 'ทั่วโลก' สำหรับแอปพลิเคชันทั้งหมดอย่างไรก็ตามจะไม่เป็นการดีกว่าที่จะประกาศบริการดังกล่าวในอาร์เรย์ผู้ให้บริการของ AppModule?
UPDATE:
สำหรับคนอื่นย่อหน้าต่อไปนี้ให้คำอธิบายที่ดีอีกอย่างหนึ่งเช่นกันโดยเฉพาะอย่างยิ่งหากคุณต้องการให้บริการเฉพาะโมดูลคุณลักษณะ
ขณะนี้มีวิธีใหม่ที่แนะนำในการลงทะเบียนผู้ให้บริการภายใน
@Injectable()
มัณฑนากรโดยตรงโดยใช้providedIn
แอตทริบิวต์ใหม่ ยอมรับ'root'
เป็นค่าหรือโมดูลใด ๆ ของแอปพลิเคชันของคุณ เมื่อคุณใช้งาน'root'
ของคุณinjectable
จะถูกลงทะเบียนเป็นซิงเกิลตันในแอปพลิเคชันและคุณไม่จำเป็นต้องเพิ่มให้กับผู้ให้บริการของโมดูลรูท ในทำนองเดียวกันถ้าคุณใช้providedIn: UsersModule
ที่injectable
มีการลงทะเบียนเป็นผู้ให้บริการที่UsersModule
ไม่ต้องเพิ่มไปยังproviders
ของโมดูล." - https://blog.ninja-squad.com/2018/05/04/what-is-new-angular -6 /
อัปเดต 2:
หลังจากการตรวจสอบเพิ่มเติมฉันได้ตัดสินใจว่าจะมีประโยชน์เท่านั้น providedIn: 'root'
หากคุณต้องการprovide
ใช้บริการในโมดูลอื่นที่ไม่ใช่รูทโมดูลคุณควรใช้providers
อาร์เรย์ในมัณฑนากรของโมดูลคุณลักษณะดีกว่ามิฉะนั้นคุณจะต้องพึ่งพาการอ้างอิงแบบวงกลม มีการพูดคุยที่น่าสนใจที่นี่ - https://github.com/angular/angular-cli/issues/10170