Angular 2 - Components, Bootstrap, and the DOM

 Angular is built upon components. The starting point of an Angular app is the bootstrapping of the initial parent component. Much like the html DOM tree that starts with an html element and then branches down from there, Angular runs on a component tree model. 

After Angular loads the first component with the bootstrap call, it then looks within that component's html view and sees if it has any nested components. If so, Angular finds matches and runs the appropriate component code on those. This repeats for each component down the tree. A component in Angular is used to render a portion of html and provide functionality to that portion. It does this through a component class in which you can define application logic for the component.

 For example, you can have a MediaItemComponent that can have a property named mediaItem that represents the data for a media item. And that component can also have a method called onDeleteClick that could handle raising the delete media item event. 

With each component in Angular, you can specify an html template, the markup that will get rendered, and through the use of the component class, and how Angular renders the component, you can display the data for the mediaItem property in your template. And Angular provides an easy syntax known as the template syntax, to wire up to DOM events within your template, so you can wire up the click event on a button to the onDeleteClick method. You can even use components within components. This is where the component tree comes into play. Much like how you write html, creating nested elements within elements, you can build out your Angular apps by having components rendering components within their templates. Each component gets configured with a selector, which tells Angular what markup element tag to associate the component class logic with. When you build a component in Angular, you are creating a support for a new custom element for the DOM.