80 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			80 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								import {
							 | 
						||
| 
								 | 
							
								  Component,
							 | 
						||
| 
								 | 
							
								  ViewChildren,
							 | 
						||
| 
								 | 
							
								  ContentChild,
							 | 
						||
| 
								 | 
							
								  QueryList,
							 | 
						||
| 
								 | 
							
								  Input
							 | 
						||
| 
								 | 
							
								} from 'angular2/core';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@Component({
							 | 
						||
| 
								 | 
							
								  selector: 'active-label',
							 | 
						||
| 
								 | 
							
								  template: `<span class="active-label"
							 | 
						||
| 
								 | 
							
								                   *ngIf="active">
							 | 
						||
| 
								 | 
							
								    Active
							 | 
						||
| 
								 | 
							
								  </span>`
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								class ActiveLabelComponent {
							 | 
						||
| 
								 | 
							
								  active:boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  activate() {
							 | 
						||
| 
								 | 
							
								    this.active = true;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// #docregion content
							 | 
						||
| 
								 | 
							
								@Component({
							 | 
						||
| 
								 | 
							
								  selector: 'hero',
							 | 
						||
| 
								 | 
							
								  template: `<h2 [class.active]=active>
							 | 
						||
| 
								 | 
							
								    {{hero.name}}
							 | 
						||
| 
								 | 
							
								    <ng-content></ng-content>
							 | 
						||
| 
								 | 
							
								  </h2>`
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								class HeroComponent {
							 | 
						||
| 
								 | 
							
								  @Input() hero:any;
							 | 
						||
| 
								 | 
							
								  active:boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  @ContentChild(ActiveLabelComponent)
							 | 
						||
| 
								 | 
							
								  label:ActiveLabelComponent
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  activate() {
							 | 
						||
| 
								 | 
							
								    this.active = true;
							 | 
						||
| 
								 | 
							
								    this.label.activate();
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								// #enddocregion content
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// #docregion view
							 | 
						||
| 
								 | 
							
								@Component({
							 | 
						||
| 
								 | 
							
								  selector: 'heroes-queries',
							 | 
						||
| 
								 | 
							
								  template: `
							 | 
						||
| 
								 | 
							
								    <hero *ngFor="#hero of heroData"
							 | 
						||
| 
								 | 
							
								          [hero]="hero">
							 | 
						||
| 
								 | 
							
								      <active-label></active-label>
							 | 
						||
| 
								 | 
							
								    </hero>
							 | 
						||
| 
								 | 
							
								    <button (click)="activate()">
							 | 
						||
| 
								 | 
							
								      Activate
							 | 
						||
| 
								 | 
							
								    </button>
							 | 
						||
| 
								 | 
							
								  `,
							 | 
						||
| 
								 | 
							
								  directives: [
							 | 
						||
| 
								 | 
							
								    HeroComponent,
							 | 
						||
| 
								 | 
							
								    ActiveLabelComponent
							 | 
						||
| 
								 | 
							
								  ]
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								export class HeroesQueriesComponent {
							 | 
						||
| 
								 | 
							
								  heroData = [
							 | 
						||
| 
								 | 
							
								    {id: 1, name: 'Windstorm'},
							 | 
						||
| 
								 | 
							
								    {id: 2, name: 'Superman'}
							 | 
						||
| 
								 | 
							
								  ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  @ViewChildren(HeroComponent)
							 | 
						||
| 
								 | 
							
								  heroCmps:QueryList<HeroComponent>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  activate() {
							 | 
						||
| 
								 | 
							
								    this.heroCmps.forEach(
							 | 
						||
| 
								 | 
							
								      (cmp) => cmp.activate()
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								// #enddocregion view
							 |