2017-05-11 20 views
6

Tôi hiện đang làm việc trên một trong các ứng dụng của Angular2. Tôi có 3 mô-đun tính năng trong đó chứa các mô-đun tính năng phụ khác. Tôi muốn tải mô-đun tính năng phụ của Tính năng 1 vào mô-đun phụ Tính năng của Tính năng 2 và ngược lại. dưới đây là mã mẫu.Góc 2: Phụ thuộc mô đun tính năng Thông tư

hành động routing.module.ts

const routes: Routes = [ 
    { 
     path: '', 
     component: ActionComponent, 
     children: [ 
      { 
      path: ':id', 
      loadChildren: 'app/action/action-detail/action-detail.module#ActionDetailModule' 
      } 
     ] 
    } 
]; 

hành động chi tiết-routing.module.ts

const routes: Routes = [ 
    { 
     path: '', 
     component: ActionDetailComponent, 
    },  
    { 
     path: 'topic-detail/:id', 
     loadChildren: 'app/topic/decision-topic-detail/decision-topic-detail.module#DecisionTopicDetailModule', 
    } 
] 

chủ đề-routing.module.ts

const routes: Routes = [ 
    { 
     path: '', 
     component: TopicComponent, 
     children: [ 
      { 
      path: ':id', 
      loadChildren: 'app/topic/decision-topic-detail/decision-topic-detail.module#DecisionTopicDetailModule' 
      } 
     ] 
    } 
]; 

ra quyết định chủ đề-chi tiết-routing.module.ts

const routes: Routes = [ 
    { 
     path: '', 
     component: DecisionTopicDetailComponent, 
    },  
    { 
     path: 'action-detail/:id', 
     loadChildren: 'app/action/action-detail/action-detail.module#ActionDetailModule' 
    } 
] 

Điều này tạo ra sự phụ thuộc cyclic và ném lỗi của LỖI kích thước gọi stack tối đa vượt quá tại thời gian biên dịch.

Có cách nào để giải quyết lỗi này không. Tôi biết một cách là để tải toàn bộ mô-đun tính năng nó tự nhưng đó không phải là tình hình khả thi.

Xin cảm ơn trước.

+0

đó là lỗi trong CLI góc.https://github.com/angular/angular-cli/issues/6309 –

Trả lời

1

đường nên sống ở một nơi tách biệt với thành phần và bên ngoài các module những thành phần được khai báo trong.

Đối với thời gian dài nhất, tôi theo mô hình bạn đang sử dụng quá. topic-routing.module.tscó vẻ như giống như nó nên sống với các thành phần topic. Nhưng gần đây tôi đã bắt đầu nghĩ về nó trong một ánh sáng khác, và câu hỏi hóc búa của bạn ở đây làm nổi bật điều này một cách hoàn hảo.

Tôi đã bắt đầu nghĩ đến routes là trung tâm của một ứng dụng cụ thể. Sự thay đổi mô hình này xảy ra khi tôi bắt đầu viết một ứng dụng thứ hai và quyết định tái sử dụng nhiều thành phần/mô-đun mà tôi đã viết trong phần đầu tiên. Tôi nhận thấy rằng những điều duy nhất không có ý nghĩa để tái sử dụng là các tuyến đường.

Như thể các tuyến đường đã xác định "ứng dụng" và các mô-đun/thành phần đang xây dựng các khối được sử dụng bởi bất kỳ ứng dụng cụ thể nào.

Trong ánh sáng đó, tôi khuyên bạn nên làm như sau:

Di chuyển định nghĩa tuyến đường của bạn ra khỏi từng mô-đun vào ứng dụng cấp cao nhất. Họ có thể sống trong một thư mục bên cạnh app.routes và bạn có thể giữ chúng được phân phối trên các tệp hiện tại của chúng hoặc nếu bạn không có nhiều tệp đó, bạn chỉ có thể hợp nhất chúng vào cùng một tệp.

Điều này có vẻ phản trực giác và bạn mất nhóm "theo chiều dọc", trong đó tất cả các nội dung đều có các chủ đề và tất cả các công cụ action đều có hành động. Nhưng khi bạn nhìn vào các tuyến đường như là một động vật cơ bản khác với các thành phần mà chúng tham chiếu, thì nó ít đau đớn hơn và chắc chắn nó giải quyết được vấn đề của bạn.

src 
    |-app.component.ts 
    |-app.component.html 
    |-app.routes.ts <-- includes the routes in the sibling directory 
    |-routing 
     |- action.routes.ts 
     |- action-detail.routes.ts 
     |- topic.routes.ts 
     \- decision-topic-detail.ts 
    |-decision-topic-detail (module) 
    |-topic (module) 
    \-action (module) 
+0

Nếu tôi viết tất cả các tuyến đường của mình ở cấp cao nhất, tôi sẽ không bị mất tính năng tải lười của Angular2? –

+0

Tôi đã thử giải pháp của bạn, nhưng nó không giúp đỡ vì vấn đề thực tế ở đây là mô-đun chi tiết hành động được nhập vào mô-đun chủ đề và ngược lại. Xem bên dưới git https://github.com/vaibhavbparikh/circular-routes/tree/seperate-routes –

+0

@ParikhVaibhav, tôi đã được giả định rằng lý do duy nhất bạn nhập mô-đun chi tiết hành động vào mô-đun chủ đề là bởi vì bạn đang cố gắng chia sẻ các tuyến đường trên các mô-đun. Nếu nó không phải là cho các tuyến đường, lý do bạn có phụ thuộc vòng tròn đó là gì? Mô-đun không thể có phụ thuộc vòng tròn; nếu có một lý do bạn bao gồm A trong B, thì sẽ không có gì trong B mà A cần, nếu không thì đây là một lỗi thiết kế. –

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