93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | (function(app) { | ||
|  | 
 | ||
|  | app.heroQueries = app.heroQueries || {}; | ||
|  | 
 | ||
|  | app.heroQueries.ContentChildComponent = ng.core.Component({ | ||
|  |   selector: 'content-child', | ||
|  |   template: | ||
|  |     '<span class="content-child" *ngIf="active">' + | ||
|  |       'Active' + | ||
|  |     '</span>' | ||
|  | }).Class({ | ||
|  |   constructor: function ContentChildComponent() { | ||
|  |     this.active = false; | ||
|  |   }, | ||
|  | 
 | ||
|  |   activate: function() { | ||
|  |     this.active = !this.active; | ||
|  |   } | ||
|  | }); | ||
|  | 
 | ||
|  | ////////////////////
 | ||
|  | 
 | ||
|  | // #docregion content
 | ||
|  | app.heroQueries.ViewChildComponent = ng.core.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 ng.core.ContentChild(app.heroQueries.ContentChildComponent) | ||
|  |   } | ||
|  | }) | ||
|  | .Class({ | ||
|  |   constructor: function HeroQueriesHeroComponent() { | ||
|  |     this.active = false; | ||
|  |   }, | ||
|  | 
 | ||
|  |   activate: function() { | ||
|  |     this.active = !this.active; | ||
|  |     this.content.activate(); | ||
|  |   } | ||
|  | }); | ||
|  | // #enddocregion content
 | ||
|  | 
 | ||
|  | ////////////////////
 | ||
|  | 
 | ||
|  | // #docregion view
 | ||
|  | app.heroQueries.HeroQueriesComponent = ng.core.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 ng.core.ViewChildren(app.heroQueries.ViewChildComponent) | ||
|  |   } | ||
|  | }) | ||
|  | .Class({ | ||
|  |   constructor: function HeroQueriesComponent() { | ||
|  |     this.active = false; | ||
|  |     this.heroData = [ | ||
|  |       {id: 1, name: 'Windstorm'}, | ||
|  |       {id: 2, name: 'LaughingGas'} | ||
|  |     ]; | ||
|  |   }, | ||
|  | 
 | ||
|  |   activate: function() { | ||
|  |     this.active = !this.active; | ||
|  |     this.views.forEach(function(view) { | ||
|  |       view.activate(); | ||
|  |     }); | ||
|  |   }, | ||
|  | }); | ||
|  | 
 | ||
|  | // #docregion defined-property
 | ||
|  | // add prototype property w/ getter outside the DSL
 | ||
|  | var proto = app.heroQueries.HeroQueriesComponent.prototype; | ||
|  | Object.defineProperty(proto, "buttonLabel", { | ||
|  |     get: function () { | ||
|  |         return this.active ? 'Deactivate' : 'Activate'; | ||
|  |     }, | ||
|  |     enumerable: true | ||
|  | }); | ||
|  | // #enddocregion defined-property
 | ||
|  | // #enddocregion view
 | ||
|  | 
 | ||
|  | })(window.app = window.app || {}); |