2017-02-09 24 views
6

Tôi đã đi qua hướng dẫn Góc và khi đi qua phần HTTP https://angular.io/docs/ts/latest/tutorial/toh-pt6.html và đã nhận thấy rằng thứ tự nhập khẩu được khai báo trong NgModule tạo sự khác biệt về việc ứng dụng có hoạt động hay không. Tôi muốn biết tại sao lại thế.Tại sao thứ tự NgModule lại quan trọng?

Đặc biệt công trình này:

 

    @NgModule({ 
     imports: [ 
     BrowserModule, 
     FormsModule, 
     HttpModule, 
     InMemoryWebApiModule.forRoot(InMemoryDataService), 
     AppRoutingModule 
     ], 
    ... 
    }) 

nhưng sau thì không. Danh sách các anh hùng không được tải. Lưu ý rằng HttpModule được khai báo SAU KHI InMemoryWebApiModule:

 

    @NgModule({ 
     imports: [ 
     BrowserModule, 
     FormsModule, 
     InMemoryWebApiModule.forRoot(InMemoryDataService), 
     HttpModule, 
     AppRoutingModule 
     ], 
    ... 
    }) 

Hướng dẫn sử dụng Góc 2.4.4. Tôi đã nhận thấy vấn đề trong cả Firefox và IE. Tôi đã không tìm thấy bất kỳ điều gì trong các tìm kiếm trên google của tôi, điều này sẽ cho biết nguồn gốc của vấn đề.

Trả lời

3

Thứ tự các nhà cung cấp quan trọng, đối với các thành phần, chỉ thị hoặc đường dẫn đã xuất, nó không quan trọng, bởi vì xung đột dẫn đến lỗi.

Các InMemoryWebApiModule.forRoot(InMemoryDataService), ghi đè Http và nếu HttpModule được cung cấp sau, hành vi này sẽ bị hủy. Các nhà cung cấp được thêm vào sau sẽ ghi đè các nhà cung cấp đã đăng ký bằng cùng một khóa.

+2

Cảm ơn điều này sẽ giúp. Tôi tìm thấy điều này trong readme của InMemoryWebApi: "Luôn nhập InMemoryWebApiModule sau HttpModule để đảm bảo rằng nhà cung cấp XHRBackend của InMemoryWebApiModule thay thế tất cả những người khác." Đây là cơ bản những gì bạn nói. – hashpyrit

+1

thứ tự nhập cũng quan trọng, tôi nhận thấy rằng nếu tôi đặt AppRoutingModule sau một mô-đun tùy chỉnh, nó sẽ tải mô-đun tùy chỉnh đó làm trang đầu tiên thay vì mô-đun được định nghĩa trong AppRoutingModule – albanx

Các vấn đề liên quan