88 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			88 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								.l-main-section
							 | 
						||
| 
								 | 
							
								  p.
							 | 
						||
| 
								 | 
							
								      As mentioned earlier, you build Angular applications as a tree of nested components.  You've seen how to create
							 | 
						||
| 
								 | 
							
								      a top-level component.  You add child components to a parent component by using them in the parent component's
							 | 
						||
| 
								 | 
							
								      template.
							 | 
						||
| 
								 | 
							
								  p.
							 | 
						||
| 
								 | 
							
								      Given a bootstrapping template with a <code><parent></code> tag in the body, you can create a parent
							 | 
						||
| 
								 | 
							
								      component that uses a <code><child></code> component like so:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  pre.prettyprint.linenums.lang-javascript
							 | 
						||
| 
								 | 
							
								    code.
							 | 
						||
| 
								 | 
							
								      //ES5
							 | 
						||
| 
								 | 
							
								      function ParentComponent() {
							 | 
						||
| 
								 | 
							
								        this.message = "I'm the parent";
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      ParentComponent.annotations = [
							 | 
						||
| 
								 | 
							
								        new angular.Component({
							 | 
						||
| 
								 | 
							
								          selector: "parent"
							 | 
						||
| 
								 | 
							
								        }),
							 | 
						||
| 
								 | 
							
								        new angular.View({
							 | 
						||
| 
								 | 
							
								          template:
							 | 
						||
| 
								 | 
							
								            '<h1>{{ message }}</h1>' +
							 | 
						||
| 
								 | 
							
								            '<child></child>',
							 | 
						||
| 
								 | 
							
								          directives: [ChildComponent]
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								      ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  pre.prettyprint.linenums.lang-typescript
							 | 
						||
| 
								 | 
							
								    code.
							 | 
						||
| 
								 | 
							
								      //TypeScript
							 | 
						||
| 
								 | 
							
								      @Component({
							 | 
						||
| 
								 | 
							
								        selector: 'parent'
							 | 
						||
| 
								 | 
							
								      })
							 | 
						||
| 
								 | 
							
								      @View({
							 | 
						||
| 
								 | 
							
								        template: `
							 | 
						||
| 
								 | 
							
								          <h1>{{ message }}</h1>
							 | 
						||
| 
								 | 
							
								          <child></child>
							 | 
						||
| 
								 | 
							
								        `,
							 | 
						||
| 
								 | 
							
								        directives: [ChildComponent]
							 | 
						||
| 
								 | 
							
								      })
							 | 
						||
| 
								 | 
							
								      class ParentComponent {
							 | 
						||
| 
								 | 
							
								        message: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        constructor() {
							 | 
						||
| 
								 | 
							
								          this.message = "I'm the parent";
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  p You then just need to write the <code>ChildComponent</code> class to make it work:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  pre.prettyprint.linenums.lang-javascript
							 | 
						||
| 
								 | 
							
								    code.
							 | 
						||
| 
								 | 
							
								      //ES5
							 | 
						||
| 
								 | 
							
								      function ChildComponent() {
							 | 
						||
| 
								 | 
							
								        this.message = "I'm the child";
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      ChildComponent.annotations = [
							 | 
						||
| 
								 | 
							
								        new angular.Component({
							 | 
						||
| 
								 | 
							
								          selector: "child"
							 | 
						||
| 
								 | 
							
								        }),
							 | 
						||
| 
								 | 
							
								        new angular.View({
							 | 
						||
| 
								 | 
							
								          template: '<p> {{ message }} </p>'
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								      ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  pre.prettyprint.linenums.lang-typescript
							 | 
						||
| 
								 | 
							
								    code.
							 | 
						||
| 
								 | 
							
								      //TypeScript
							 | 
						||
| 
								 | 
							
								      @Component({
							 | 
						||
| 
								 | 
							
								        selector: 'child'
							 | 
						||
| 
								 | 
							
								      })
							 | 
						||
| 
								 | 
							
								      @View({
							 | 
						||
| 
								 | 
							
								        template: `
							 | 
						||
| 
								 | 
							
								          <p> {{ message }} </p>
							 | 
						||
| 
								 | 
							
								        `
							 | 
						||
| 
								 | 
							
								      })
							 | 
						||
| 
								 | 
							
								      class ChildComponent {
							 | 
						||
| 
								 | 
							
								        constructor() {
							 | 
						||
| 
								 | 
							
								          this.message = "I'm the child";
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  p.
							 | 
						||
| 
								 | 
							
								      Notice that in addition to using the <code><child></code> element in the parent template, you also need to
							 | 
						||
| 
								 | 
							
								      add <code>ChildComponent</code> in <code>ParentComponent</code>'s list of directives
							 | 
						||
| 
								 | 
							
								  p.
							 | 
						||
| 
								 | 
							
								      [TODO: Motivate communication between components with iterator example that passes index to the child]
							 |