This document discusses data flow patterns in Angular 2. It begins by explaining the component tree structure and how components communicate with inputs and outputs. It then covers RxJS observables and operators for reactive programming. Observables can be used as inputs to components and with the async pipe. Forms and HTTP requests also return observables. Change detection strategies like OnPush can improve performance. Immutable data structures help avoid unnecessary checks. Overall, Angular 2 provides many options for component communication through RxJS observables and efficient change detection.