Khi tạo các dịch vụ trong CLI góc, nó sẽ thêm siêu dữ liệu bổ sung với thuộc tính 'được cung cấp trong' với mặc định là 'root' cho trình trang trí Tiêm.
@Injectable({
providedIn: 'root',
})
Chính xác thì cung cấp những gì? Tôi giả định rằng điều này sẽ làm cho dịch vụ khả dụng như một dịch vụ đơn loại 'toàn cầu' cho toàn bộ ứng dụng, tuy nhiên, sẽ không sạch hơn khi khai báo các dịch vụ đó trong mảng nhà cung cấp của AppModule?
CẬP NHẬT:
Đối với bất kỳ ai khác, đoạn sau đây cũng cung cấp một lời giải thích tốt khác về nó, đặc biệt nếu bạn muốn cung cấp dịch vụ của mình cho một mô-đun tính năng.
Hiện tại có một cách mới, được đề nghị, để đăng ký một nhà cung cấp, trực tiếp bên trong
@Injectable()
trang trí, sử dụngprovidedIn
thuộc tính mới . Nó chấp nhận'root'
như một giá trị hoặc bất kỳ mô-đun nào trong ứng dụng của bạn. Khi bạn sử dụng'root'
, bạninjectable
sẽ được đăng ký dưới dạng một đơn trong ứng dụng và bạn không cần thêm nó vào các nhà cung cấp của mô-đun gốc. Tương tự, nếu bạn sử dụngprovidedIn: UsersModule
, thìinjectable
được đăng ký là nhà cung cấpUsersModule
mà không cần thêm nó vàoproviders
mô-đun. "- https://blog.ninja-squad.com/2018/05/04/what-is-new-angular -6 /
CẬP NHẬT 2:
Sau khi điều tra thêm, tôi đã quyết định rằng nó chỉ hữu ích để có providedIn: 'root'
Nếu bạn muốn provide
một dịch vụ trong bất kỳ mô-đun nào khác ngoài mô-đun gốc, thì tốt hơn hết bạn nên sử dụng providers
mảng trong các trang trí của mô-đun tính năng, nếu không, bạn sẽ gặp khó khăn với các phụ thuộc vòng tròn. Các cuộc thảo luận thú vị sẽ có tại đây - https://github.com/angular/angular-cli/issues/10170