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
 |