的問題是我怎麼從列表後的值到後期的細節,使其立即作出反應?我假設應該有一個Observable在後期細節等待變化。我也假設它應該觀看輸入屬性。問題是:我可以從列表中獲取值並將其作爲輸入屬性發送給後期詳細信息?可以(也應該)通過父組件傳遞它,還是應該爲此定義一個服務?
這種情況非常簡單 - 後期列表需要指示何時選擇某個項目,並將該「selectedItem」信息傳遞給後期細節以供顯示。
如果我正在處理這種情況,我會使用簡單的輸入和輸出(即屬性和事件綁定)在組件之間傳遞信息,使用父組件作爲通信的中介。您正在通過父組件進行路由 - 具體來說,後期列表指示何時選擇帖子以及該帖子是什麼,而帖子詳細信息僅顯示傳遞給它的任何帖子。
因此,後列表需要一個名爲itemSelect的@Output EventEmitter屬性或其他適當的東西。此屬性的目的是通知任何關心何時選擇項目以及該項目是什麼的人。
PostListComponent:
export class PostDetailComponent {
.....
@Output() postSelect = new EventEmitter();
// whenever a post is selected, you call this.postSelect.emit(selectedPost)
// to notify others which post is selected
在PostDetailComponent:
export class PostDetailComponent {
.....
// this is your property binding
// used to get data in real time in to the component for display
@Input() post;
最後,父組件需要交物業接收來自列表發佈更新,並通過這些更新後期細節。
爲父級
的爲父級只是監聽來自PostList更新,並接收他們,分配事件(在模板中的$事件值),其內部崗位性質,實質這又被推送到PostDetail。
@Component({
.......
template: `
<post-list (postSelect)="post = $event"> </post-list>
<post-detail [post]="post"> </post-detail>
`
})
export class ParentComponent {
post: any; // brokers the communication between the two child components
.......
這就是我的情況。
您可以使用服務來代理通信,但通常只有當通信方式複雜或兩個組件在視圖層次結構中彼此不接近時才需要,因此很難從一個組件到另一個。但在你的情況下,服務可能是矯枉過正的。
See the docs for more info.
因爲你提到Observable,我們可以假設這是一個關於angular2的問題,並且與angularjs無關? – Claies
https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service – echonax
是的,Angular 2,更確切地說是Angular 4.感謝您的鏈接。 –