98 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import {
 | |
|   Component,
 | |
|   ContentChild,
 | |
|   Input,
 | |
|   QueryList,
 | |
|   ViewChildren
 | |
| } from '@angular/core';
 | |
| 
 | |
| export class ContentChildComponent {
 | |
|   constructor() {
 | |
|     this.active = false;
 | |
|   }
 | |
| 
 | |
|   activate() {
 | |
|     this.active = !this.active;
 | |
|   }
 | |
| }
 | |
| 
 | |
| ContentChildComponent.annotations = [
 | |
|   new Component({
 | |
|     selector: 'content-child',
 | |
|     template: `
 | |
|     <span class="content-child" *ngIf="active">
 | |
|       Active
 | |
|     </span>`
 | |
|   })
 | |
| ];
 | |
| 
 | |
| ////////////////////
 | |
| 
 | |
| // #docregion content
 | |
| export class ViewChildComponent {
 | |
|   constructor() {
 | |
|     this.active = false;
 | |
|   }
 | |
| 
 | |
|   activate() {
 | |
|     this.active = !this.active;
 | |
|     this.content.activate();
 | |
|   }
 | |
| }
 | |
| 
 | |
| ViewChildComponent.annotations = [
 | |
|   new Component({
 | |
|     selector: 'view-child',
 | |
|     template: `<h2 [class.active]=active>
 | |
|       {{hero.name}}
 | |
|       <ng-content></ng-content>
 | |
|     </h2>`,
 | |
|     styles: ['.active {font-weight: bold; background-color: skyblue;}'],
 | |
|     inputs: ['hero'],
 | |
|     queries: {
 | |
|       content: new ContentChild(ContentChildComponent)
 | |
|     }
 | |
|   })
 | |
| ];
 | |
| // #enddocregion content
 | |
| 
 | |
| ////////////////////
 | |
| 
 | |
| // #docregion view
 | |
| export class HeroQueriesComponent {
 | |
|   constructor(){
 | |
|     this.active = false;
 | |
|     this.heroData = [
 | |
|       {id: 1, name: 'Windstorm'},
 | |
|       {id: 2, name: 'LaughingGas'}
 | |
|     ];
 | |
|   }
 | |
| 
 | |
|   activate() {
 | |
|     this.active = !this.active;
 | |
|     this.views.forEach(
 | |
|       view => view.activate()
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   get buttonLabel() {
 | |
|     return this.active ? 'Deactivate' : 'Activate';
 | |
|   }
 | |
| }
 | |
| 
 | |
| HeroQueriesComponent.annotations = [
 | |
|   new Component({
 | |
|     selector: 'hero-queries',
 | |
|     template: `
 | |
|       <view-child *ngFor="let hero of heroData" [hero]="hero">
 | |
|         <content-child></content-child>
 | |
|       </view-child>
 | |
|       <button (click)="activate()">{{buttonLabel}} All</button>
 | |
|     `,
 | |
|     queries: {
 | |
|       views: new ViewChildren(ViewChildComponent)
 | |
|     }
 | |
|   })
 | |
| ];
 | |
| // #enddocregion view
 |