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 || {});
							 |