2016-10-10 22 views
6

Tôi có một thành phần và tôi muốn nó chuyển dữ liệu đến một thành phần khác trong mô-đun khác. Trên thực tế, app.component của tôi là phụ huynh của các mô-đun trẻ em này. Và tôi muốn mỗi mô-đun con gửi một số dữ liệu đến app.component. Nhưng chúng là trẻ em và cha mẹ chỉ trong một định tuyến. Vì vậy, họ không thực sự là cha mẹ và trẻ em, tôi đoán.Các thành phần mô-đun khác nhau liên lạc trong Angular 2

Ý tôi là, -dưỡng tôi cho app.component trông như thế này:

<div class="navbar-collapse collapse"> 
    <ul class="nav navbar-nav navbar-left"> 
     <li><a routerLink="link1" routerLinkActive="active">Page1</a></li> 
     <li><a routerLink="link2" routerLinkActive="active">Page2</a></li> 
     <li><a routerLink="link3" routerLinkActive="active">Page3</a></li> 
     <li><a routerLink="link4" routerLinkActive="active">Page4</a></li> 
    </ul> 
    </div> 
</nav> 
<div *ngIf="needsSidebar" id="sidebar">some content</div> 
<div> 
    <router-outlet></router-outlet> 
</div> 

Vì vậy app.component không có kết nối trực tiếp với các mô-đun và các thành phần của họ. Tôi đã cố gắng sử dụng Output nhưng vì các thành phần từ các mô-đun khác nhau nên không thành công. Tôi bị mất trong những gì tôi nên làm. Tôi muốn các mô-đun "con" của tôi gửi dữ liệu lên trên app.module để thông báo nếu họ cần một thanh bên và nội dung nào cần hiển thị bên cạnh. Tôi làm nó như thế nào?

Trả lời

6

Không quan trọng các mô-đun có liên quan như thế nào. Điều quan trọng là, nếu các thành phần là trẻ em trong chế độ xem thành phần. Trong trường hợp này bạn có thể sử dụng cú pháp ràng buộc Angulars. Trong các trường hợp khác, sử dụng dịch vụ dùng chung. Để biết chi tiết, hãy xem https://angular.io/docs/ts/latest/cookbook/component-communication.html

Điều gì cũng quan trọng là khi bạn thêm dịch vụ được chia sẻ làm nhà cung cấp. Nếu bạn thêm nó vào một thành phần, chỉ một cá thể của thành phần này và các phần tử con và con cháu của nó chia sẻ cá thể dịch vụ này. Nếu bạn thêm một dịch vụ cho các nhà cung cấp của @NgModule(), một cá thể đơn lẻ sẽ được chia sẻ với toàn bộ ứng dụng (đối với các mô-đun không tải được).

+0

Tôi đã cố gắng sử dụng liên kết Góc với Đầu ra nhưng tôi không có bất kỳ bộ chọn nào trong html của mình, tôi chỉ có 'bộ định tuyến-lối ra', làm cách nào tôi có thể vượt qua một sự kiện với điều đó? Và khi tôi thử với jusn chọn để kiểm tra nó, tôi đã có lỗi này: 'zone.js: 355 Không thích hợp Lời hứa từ chối: Lỗi phân tích cú pháp mẫu: 'bộ chọn con' không phải là phần tử đã biết:' –

+0

Thành phần con cần được thêm vào 'exports: []' trong NgModule', trong đó nó nằm trong 'declarationations: []' và 'NgModule' hiện tại cần phải có module khác trong' import: [] '. Sau đó, ràng buộc với '' sẽ hoạt động. Đối với các thành phần được thêm vào bởi bộ định tuyến, không có sự hỗ trợ cho ràng buộc. Trong trường hợp này, bạn cần sử dụng một dịch vụ được chia sẻ. –

+2

Cảm ơn, sau đó, tôi đoán, dịch vụ chia sẻ là dành cho tôi. –

1

Trong trường hợp này, bạn có thể xem sharedModule. SharedModule cổ phiếu services,pipes & etc mà bạn muốn tận dụng trong các mô-đun/thành phần khác nhau.

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