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ụngprovidedInthuộ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ạninjectablesẽ đượ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ấpUsersModulemà không cần thêm nó vàoprovidersmô-đ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 providemộ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 providersmả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