652 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
		
		
			
		
	
	
			652 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| 
								 | 
							
								<html lang="en"><head></head><body><form id="mainForm" method="post" action="http://plnkr.co/edit/?p=preview" target="_self"><input type="hidden" name="files[app/app.component.ts]" value="import { Component } from '@angular/core';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@Component({
							 | 
						||
| 
								 | 
							
								  moduleId: module.id,
							 | 
						||
| 
								 | 
							
								  selector: 'my-app',
							 | 
						||
| 
								 | 
							
								  templateUrl: './app.component.html',
							 | 
						||
| 
								 | 
							
								  styles: [
							 | 
						||
| 
								 | 
							
								    // See hero-di-inject-additional.component
							 | 
						||
| 
								 | 
							
								    'hero-host, hero-host-meta { border: 1px dashed black; display: block; padding: 4px;}',
							 | 
						||
| 
								 | 
							
								    '.heading {font-style: italic}'
							 | 
						||
| 
								 | 
							
								  ]
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								export class AppComponent {
							 | 
						||
| 
								 | 
							
								  title = 'TypeScript';
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								*/"><input type="hidden" name="files[app/app.module.ts]" value="/* tslint:disable-next-line:no-unused-variable */
							 | 
						||
| 
								 | 
							
								import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
							 | 
						||
| 
								 | 
							
								import { BrowserModule } from '@angular/platform-browser';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import { AppComponent } from './app.component';
							 | 
						||
| 
								 | 
							
								import { ConfirmComponent } from './confirm.component';
							 | 
						||
| 
								 | 
							
								import { HeroComponent } from './hero.component';
							 | 
						||
| 
								 | 
							
								import { HeroComponent as HeroDIComponent } from './hero-di.component';
							 | 
						||
| 
								 | 
							
								import { HeroComponent as HeroDIInjectComponent } from './hero-di-inject.component';
							 | 
						||
| 
								 | 
							
								import { HeroComponent as HeroDIInjectAdditionalComponent } from './hero-di-inject-additional.component';
							 | 
						||
| 
								 | 
							
								import { HeroHostComponent } from './hero-host.component';
							 | 
						||
| 
								 | 
							
								import { HeroHostMetaComponent } from './hero-host-meta.component';
							 | 
						||
| 
								 | 
							
								import { HeroIOComponent } from './hero-io.component';
							 | 
						||
| 
								 | 
							
								import { HeroComponent as HeroLifecycleComponent } from './hero-lifecycle.component';
							 | 
						||
| 
								 | 
							
								import { HeroQueriesComponent, ViewChildComponent, ContentChildComponent } from './hero-queries.component';
							 | 
						||
| 
								 | 
							
								import { HeroTitleComponent } from './hero-title.component';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import { DataService } from './data.service';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@NgModule({
							 | 
						||
| 
								 | 
							
								  imports: [
							 | 
						||
| 
								 | 
							
								    BrowserModule
							 | 
						||
| 
								 | 
							
								  ],
							 | 
						||
| 
								 | 
							
								  declarations: [
							 | 
						||
| 
								 | 
							
								    AppComponent,
							 | 
						||
| 
								 | 
							
								    ConfirmComponent,
							 | 
						||
| 
								 | 
							
								    HeroComponent,
							 | 
						||
| 
								 | 
							
								    HeroDIComponent,
							 | 
						||
| 
								 | 
							
								    HeroDIInjectComponent,
							 | 
						||
| 
								 | 
							
								    HeroDIInjectAdditionalComponent,
							 | 
						||
| 
								 | 
							
								    HeroHostComponent, HeroHostMetaComponent,
							 | 
						||
| 
								 | 
							
								    HeroIOComponent,
							 | 
						||
| 
								 | 
							
								    HeroLifecycleComponent,
							 | 
						||
| 
								 | 
							
								    HeroQueriesComponent, ViewChildComponent, ContentChildComponent,
							 | 
						||
| 
								 | 
							
								    HeroTitleComponent
							 | 
						||
| 
								 | 
							
								  ],
							 | 
						||
| 
								 | 
							
								  providers: [
							 | 
						||
| 
								 | 
							
								    DataService,
							 | 
						||
| 
								 | 
							
								    { provide: 'heroName', useValue: 'Windstorm' }
							 | 
						||
| 
								 | 
							
								  ],
							 | 
						||
| 
								 | 
							
								  bootstrap: [ AppComponent ],
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // schemas: [ NO_ERRORS_SCHEMA ] // helpful for debugging!
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								export class AppModule { }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* tslint:disable no-unused-variable */
							 | 
						||
| 
								 | 
							
								import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
							 | 
						||
| 
								 | 
							
								import {
							 | 
						||
| 
								 | 
							
								  LocationStrategy,
							 | 
						||
| 
								 | 
							
								  HashLocationStrategy
							 | 
						||
| 
								 | 
							
								} from '@angular/common';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								*/"><input type="hidden" name="files[app/confirm.component.ts]" value="import { Component, EventEmitter, Input, Output } from '@angular/core';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@Component({
							 | 
						||
| 
								 | 
							
								  moduleId: module.id,
							 | 
						||
| 
								 | 
							
								  selector: 'app-confirm',
							 | 
						||
| 
								 | 
							
								  templateUrl: './confirm.component.html'
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								export class ConfirmComponent {
							 | 
						||
| 
								 | 
							
								  @Input() okMsg = '';
							 | 
						||
| 
								 | 
							
								  @Input('cancelMsg') notOkMsg = '';
							 | 
						||
| 
								 | 
							
								  @Output() ok = new EventEmitter();
							 | 
						||
| 
								 | 
							
								  @Output('cancel') notOk = new EventEmitter();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  onOkClick() {
							 | 
						||
| 
								 | 
							
								    this.ok.emit(true);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  onNotOkClick() {
							 | 
						||
| 
								 | 
							
								    this.notOk.emit(true);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								*/"><input type="hidden" name="files[app/data.service.ts]" value="import { Injectable } from '@angular/core';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@Injectable()
							 | 
						||
| 
								 | 
							
								export class DataService {
							 | 
						||
| 
								 | 
							
								  constructor() { }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  getHeroName() {
							 | 
						||
| 
								 | 
							
								    return 'Windstorm';
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								*/"><input type="hidden" name="files[app/hero-di-inject-additional.component.ts]" value="import { Component } from '@angular/core';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@Component({
							 | 
						||
| 
								 | 
							
								  selector: 'hero-di-inject-additional',
							 | 
						||
| 
								 | 
							
								  template: `<hero-title title="Tour of Heroes"></hero-title>`
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								export class HeroComponent { }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								*/"><input type="hidden" name="files[app/hero-di-inject.component.ts]" value="import { Component, Inject } from '@angular/core';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@Component({
							 | 
						||
| 
								 | 
							
								  selector: 'hero-di-inject',
							 | 
						||
| 
								 | 
							
								  template: `<h1>Hero: {{name}}</h1>`
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								export class HeroComponent {
							 | 
						||
| 
								 | 
							
								  constructor(@Inject('heroName') private name: string) { }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								*/"><input type="hidden" name="files[app/hero-di.component.ts]" value="import { Component }   from '@angular/core';
							 | 
						||
| 
								 | 
							
								import { DataService } from './data.service';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@Component({
							 | 
						||
| 
								 | 
							
								  selector: 'hero-di',
							 | 
						||
| 
								 | 
							
								  template: `<h1>Hero: {{name}}</h1>`
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								export class HeroComponent {
							 | 
						||
| 
								 | 
							
								  name = '';
							 | 
						||
| 
								 | 
							
								  constructor(dataService: DataService) {
							 | 
						||
| 
								 | 
							
								    this.name = dataService.getHeroName();
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								*/"><input type="hidden" name="files[app/hero-host-meta.component.ts]" value="import { Component } from '@angular/core';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@Component({
							 | 
						||
| 
								 | 
							
								  selector: 'hero-host-meta',
							 | 
						||
| 
								 | 
							
								  template: `
							 | 
						||
| 
								 | 
							
								    <h1 [class.active]="active">Hero Host in Metadata</h1>
							 | 
						||
| 
								 | 
							
								    <div>Heading clicks: {{clicks}}</div>
							 | 
						||
| 
								 | 
							
								  `,
							 | 
						||
| 
								 | 
							
								  host: {
							 | 
						||
| 
								 | 
							
								    // HostBindings to the <hero-host-meta> element
							 | 
						||
| 
								 | 
							
								    '[title]': 'title',
							 | 
						||
| 
								 | 
							
								    '[class.heading]': 'headingClass',
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // HostListeners on the entire <hero-host-meta> element
							 | 
						||
| 
								 | 
							
								    '(click)': 'clicked()',
							 | 
						||
| 
								 | 
							
								    '(mouseenter)': 'enter($event)',
							 | 
						||
| 
								 | 
							
								    '(mouseleave)': 'leave($event)'
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  // Styles within (but excluding) the <hero-host-meta> element
							 | 
						||
| 
								 | 
							
								  styles: ['.active {background-color: coral;}']
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								export class HeroHostMetaComponent {
							 | 
						||
| 
								 | 
							
								  title = 'Hero Host in Metadata Tooltip';
							 | 
						||
| 
								 | 
							
								  headingClass = true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  active = false;
							 | 
						||
| 
								 | 
							
								  clicks = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  clicked() {
							 | 
						||
| 
								 | 
							
								    this.clicks += 1;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  enter(event: Event) {
							 | 
						||
| 
								 | 
							
								    this.active = true;
							 | 
						||
| 
								 | 
							
								    this.headingClass = false;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  leave(event: Event) {
							 | 
						||
| 
								 | 
							
								    this.active = false;
							 | 
						||
| 
								 | 
							
								    this.headingClass = true;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								*/"><input type="hidden" name="files[app/hero-host.component.ts]" value="import { Component, HostBinding, HostListener } from '@angular/core';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@Component({
							 | 
						||
| 
								 | 
							
								  selector: 'hero-host',
							 | 
						||
| 
								 | 
							
								  template: `
							 | 
						||
| 
								 | 
							
								    <h1 [class.active]="active">Hero Host in Decorators</h1>
							 | 
						||
| 
								 | 
							
								    <div>Heading clicks: {{clicks}}</div>
							 | 
						||
| 
								 | 
							
								  `,
							 | 
						||
| 
								 | 
							
								  // Styles within (but excluding) the <hero-host> element
							 | 
						||
| 
								 | 
							
								  styles: ['.active {background-color: yellow;}']
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								export class HeroHostComponent {
							 | 
						||
| 
								 | 
							
								  // HostBindings to the <hero-host> element
							 | 
						||
| 
								 | 
							
								  @HostBinding() title = 'Hero Host in Decorators Tooltip';
							 | 
						||
| 
								 | 
							
								  @HostBinding('class.heading') headingClass = true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  active = false;
							 | 
						||
| 
								 | 
							
								  clicks = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // HostListeners on the entire <hero-host> element
							 | 
						||
| 
								 | 
							
								  @HostListener('click')
							 | 
						||
| 
								 | 
							
								  clicked() {
							 | 
						||
| 
								 | 
							
								    this.clicks += 1;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  @HostListener('mouseenter', ['$event'])
							 | 
						||
| 
								 | 
							
								  enter(event: Event) {
							 | 
						||
| 
								 | 
							
								    this.active = true;
							 | 
						||
| 
								 | 
							
								    this.headingClass = false;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  @HostListener('mouseleave', ['$event'])
							 | 
						||
| 
								 | 
							
								  leave(event: Event) {
							 | 
						||
| 
								 | 
							
								    this.active = false;
							 | 
						||
| 
								 | 
							
								    this.headingClass = true;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								*/"><input type="hidden" name="files[app/hero-io.component.ts]" value="import { Component } from '@angular/core';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@Component({
							 | 
						||
| 
								 | 
							
								  selector: 'hero-io',
							 | 
						||
| 
								 | 
							
								  template: `
							 | 
						||
| 
								 | 
							
								    <app-confirm [okMsg]="'OK'"
							 | 
						||
| 
								 | 
							
								                 [cancelMsg]="'Cancel'"
							 | 
						||
| 
								 | 
							
								                 (ok)="onOk()"
							 | 
						||
| 
								 | 
							
								                 (cancel)="onCancel()">
							 | 
						||
| 
								 | 
							
								    </app-confirm>
							 | 
						||
| 
								 | 
							
								    <span *ngIf="okClicked">OK clicked</span>
							 | 
						||
| 
								 | 
							
								    <span *ngIf="cancelClicked">Cancel clicked</span>
							 | 
						||
| 
								 | 
							
								  `
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								export class HeroIOComponent {
							 | 
						||
| 
								 | 
							
								  okClicked     = false;
							 | 
						||
| 
								 | 
							
								  cancelClicked = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  onOk() {
							 | 
						||
| 
								 | 
							
								    this.okClicked = true;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  onCancel() {
							 | 
						||
| 
								 | 
							
								    this.cancelClicked = true;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								*/"><input type="hidden" name="files[app/hero-lifecycle.component.ts]" value="import { Component, OnInit } from '@angular/core';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@Component({
							 | 
						||
| 
								 | 
							
								  selector: 'hero-lifecycle',
							 | 
						||
| 
								 | 
							
								  template: `<h1>Hero: {{name}}</h1>`
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								export class HeroComponent implements OnInit {
							 | 
						||
| 
								 | 
							
								  name: string;
							 | 
						||
| 
								 | 
							
								  ngOnInit() {
							 | 
						||
| 
								 | 
							
								    // todo: fetch from server async
							 | 
						||
| 
								 | 
							
								    setTimeout(() => this.name = 'Windstorm', 0);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								*/"><input type="hidden" name="files[app/hero-queries.component.ts]" value="import {
							 | 
						||
| 
								 | 
							
								  Component,
							 | 
						||
| 
								 | 
							
								  ContentChild,
							 | 
						||
| 
								 | 
							
								  Input,
							 | 
						||
| 
								 | 
							
								  QueryList,
							 | 
						||
| 
								 | 
							
								  ViewChildren
							 | 
						||
| 
								 | 
							
								} from '@angular/core';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@Component({
							 | 
						||
| 
								 | 
							
								  selector: 'content-child',
							 | 
						||
| 
								 | 
							
								  template: `
							 | 
						||
| 
								 | 
							
								  <span class="content-child" *ngIf="active">
							 | 
						||
| 
								 | 
							
								    Active
							 | 
						||
| 
								 | 
							
								  </span>`
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								export class ContentChildComponent {
							 | 
						||
| 
								 | 
							
								  active = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  activate() {
							 | 
						||
| 
								 | 
							
								    this.active = !this.active;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@Component({
							 | 
						||
| 
								 | 
							
								  selector: 'view-child',
							 | 
						||
| 
								 | 
							
								  template: `
							 | 
						||
| 
								 | 
							
								  <h2 [class.active]=active>
							 | 
						||
| 
								 | 
							
								    {{hero.name}}
							 | 
						||
| 
								 | 
							
								    <ng-content></ng-content>
							 | 
						||
| 
								 | 
							
								  </h2>`,
							 | 
						||
| 
								 | 
							
								  styles: ['.active {font-weight: bold; background-color: skyblue;}']
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								export class ViewChildComponent {
							 | 
						||
| 
								 | 
							
								  @Input() hero: any;
							 | 
						||
| 
								 | 
							
								  active = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  @ContentChild(ContentChildComponent) content: ContentChildComponent;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  activate() {
							 | 
						||
| 
								 | 
							
								    this.active = !this.active;
							 | 
						||
| 
								 | 
							
								    this.content.activate();
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@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>
							 | 
						||
| 
								 | 
							
								  `
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								export class HeroQueriesComponent {
							 | 
						||
| 
								 | 
							
								  active = false;
							 | 
						||
| 
								 | 
							
								  heroData = [
							 | 
						||
| 
								 | 
							
								    {id: 1, name: 'Windstorm'},
							 | 
						||
| 
								 | 
							
								    {id: 2, name: 'LaughingGas'}
							 | 
						||
| 
								 | 
							
								  ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  @ViewChildren(ViewChildComponent) views: QueryList<ViewChildComponent>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  activate() {
							 | 
						||
| 
								 | 
							
								    this.active = !this.active;
							 | 
						||
| 
								 | 
							
								    this.views.forEach(
							 | 
						||
| 
								 | 
							
								      view => view.activate()
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  get buttonLabel() {
							 | 
						||
| 
								 | 
							
								    return this.active ? 'Deactivate' : 'Activate';
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								*/"><input type="hidden" name="files[app/hero-title.component.ts]" value="import { Attribute, Component, Inject, Optional } from '@angular/core';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@Component({
							 | 
						||
| 
								 | 
							
								  moduleId: module.id,
							 | 
						||
| 
								 | 
							
								  selector: 'hero-title',
							 | 
						||
| 
								 | 
							
								  templateUrl: './hero-title.component.html'
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								export class HeroTitleComponent {
							 | 
						||
| 
								 | 
							
								  msg: string = '';
							 | 
						||
| 
								 | 
							
								  constructor(
							 | 
						||
| 
								 | 
							
								    @Inject('titlePrefix') @Optional() private titlePrefix: string,
							 | 
						||
| 
								 | 
							
								    @Attribute('title') private title: string
							 | 
						||
| 
								 | 
							
								  ) { }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  ok() {
							 | 
						||
| 
								 | 
							
								    this.msg = 'OK!';
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								*/"><input type="hidden" name="files[app/hero.component.ts]" value="import { Component } from '@angular/core';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@Component({
							 | 
						||
| 
								 | 
							
								  selector: 'hero-view',
							 | 
						||
| 
								 | 
							
								  template: '<h1>{{title}}: {{getName()}}</h1>'
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								export class HeroComponent {
							 | 
						||
| 
								 | 
							
								  title = 'Hero Detail';
							 | 
						||
| 
								 | 
							
								  getName() {return 'Windstorm'; }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								*/"><input type="hidden" name="files[main.ts]" value="import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
							 | 
						||
| 
								 | 
							
								import { AppModule } from './app/app.module';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								platformBrowserDynamic().bootstrapModule(AppModule);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								*/"><input type="hidden" name="files[styles.css]" value="/* Master Styles */
							 | 
						||
| 
								 | 
							
								h1 {
							 | 
						||
| 
								 | 
							
								  color: #369;
							 | 
						||
| 
								 | 
							
								  font-family: Arial, Helvetica, sans-serif;
							 | 
						||
| 
								 | 
							
								  font-size: 250%;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								h2, h3 {
							 | 
						||
| 
								 | 
							
								  color: #444;
							 | 
						||
| 
								 | 
							
								  font-family: Arial, Helvetica, sans-serif;
							 | 
						||
| 
								 | 
							
								  font-weight: lighter;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								body {
							 | 
						||
| 
								 | 
							
								  margin: 2em;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								body, input[text], button {
							 | 
						||
| 
								 | 
							
								  color: #888;
							 | 
						||
| 
								 | 
							
								  font-family: Cambria, Georgia;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								a {
							 | 
						||
| 
								 | 
							
								  cursor: pointer;
							 | 
						||
| 
								 | 
							
								  cursor: hand;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								button {
							 | 
						||
| 
								 | 
							
								  font-family: Arial;
							 | 
						||
| 
								 | 
							
								  background-color: #eee;
							 | 
						||
| 
								 | 
							
								  border: none;
							 | 
						||
| 
								 | 
							
								  padding: 5px 10px;
							 | 
						||
| 
								 | 
							
								  border-radius: 4px;
							 | 
						||
| 
								 | 
							
								  cursor: pointer;
							 | 
						||
| 
								 | 
							
								  cursor: hand;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								button:hover {
							 | 
						||
| 
								 | 
							
								  background-color: #cfd8dc;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								button:disabled {
							 | 
						||
| 
								 | 
							
								  background-color: #eee;
							 | 
						||
| 
								 | 
							
								  color: #aaa;
							 | 
						||
| 
								 | 
							
								  cursor: auto;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Navigation link styles */
							 | 
						||
| 
								 | 
							
								nav a {
							 | 
						||
| 
								 | 
							
								  padding: 5px 10px;
							 | 
						||
| 
								 | 
							
								  text-decoration: none;
							 | 
						||
| 
								 | 
							
								  margin-right: 10px;
							 | 
						||
| 
								 | 
							
								  margin-top: 10px;
							 | 
						||
| 
								 | 
							
								  display: inline-block;
							 | 
						||
| 
								 | 
							
								  background-color: #eee;
							 | 
						||
| 
								 | 
							
								  border-radius: 4px;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								nav a:visited, a:link {
							 | 
						||
| 
								 | 
							
								  color: #607D8B;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								nav a:hover {
							 | 
						||
| 
								 | 
							
								  color: #039be5;
							 | 
						||
| 
								 | 
							
								  background-color: #CFD8DC;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								nav a.active {
							 | 
						||
| 
								 | 
							
								  color: #039be5;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* items class */
							 | 
						||
| 
								 | 
							
								.items {
							 | 
						||
| 
								 | 
							
								  margin: 0 0 2em 0;
							 | 
						||
| 
								 | 
							
								  list-style-type: none;
							 | 
						||
| 
								 | 
							
								  padding: 0;
							 | 
						||
| 
								 | 
							
								  width: 24em;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								.items li {
							 | 
						||
| 
								 | 
							
								  cursor: pointer;
							 | 
						||
| 
								 | 
							
								  position: relative;
							 | 
						||
| 
								 | 
							
								  left: 0;
							 | 
						||
| 
								 | 
							
								  background-color: #EEE;
							 | 
						||
| 
								 | 
							
								  margin: .5em;
							 | 
						||
| 
								 | 
							
								  padding: .3em 0;
							 | 
						||
| 
								 | 
							
								  height: 1.6em;
							 | 
						||
| 
								 | 
							
								  border-radius: 4px;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								.items li:hover {
							 | 
						||
| 
								 | 
							
								  color: #607D8B;
							 | 
						||
| 
								 | 
							
								  background-color: #DDD;
							 | 
						||
| 
								 | 
							
								  left: .1em;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								.items li.selected {
							 | 
						||
| 
								 | 
							
								  background-color: #CFD8DC;
							 | 
						||
| 
								 | 
							
								  color: white;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								.items li.selected:hover {
							 | 
						||
| 
								 | 
							
								  background-color: #BBD8DC;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								.items .text {
							 | 
						||
| 
								 | 
							
								  position: relative;
							 | 
						||
| 
								 | 
							
								  top: -3px;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								.items .badge {
							 | 
						||
| 
								 | 
							
								  display: inline-block;
							 | 
						||
| 
								 | 
							
								  font-size: small;
							 | 
						||
| 
								 | 
							
								  color: white;
							 | 
						||
| 
								 | 
							
								  padding: 0.8em 0.7em 0 0.7em;
							 | 
						||
| 
								 | 
							
								  background-color: #607D8B;
							 | 
						||
| 
								 | 
							
								  line-height: 1em;
							 | 
						||
| 
								 | 
							
								  position: relative;
							 | 
						||
| 
								 | 
							
								  left: -1px;
							 | 
						||
| 
								 | 
							
								  top: -4px;
							 | 
						||
| 
								 | 
							
								  height: 1.8em;
							 | 
						||
| 
								 | 
							
								  margin-right: .8em;
							 | 
						||
| 
								 | 
							
								  border-radius: 4px 0 0 4px;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								/* everywhere else */
							 | 
						||
| 
								 | 
							
								* {
							 | 
						||
| 
								 | 
							
								  font-family: Arial, Helvetica, sans-serif;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								*/"><input type="hidden" name="files[app/app.component.html]" value="<a id="toc"></a>
							 | 
						||
| 
								 | 
							
								<h1>{{title}}</h1>
							 | 
						||
| 
								 | 
							
								<a href="#class-metadata">Classes and Class Metadata</a><br>
							 | 
						||
| 
								 | 
							
								<a href="#io-metadata">Input and Output Decorators</a><br>
							 | 
						||
| 
								 | 
							
								<a href="#dependency-injection">Dependency Injection</a><br>
							 | 
						||
| 
								 | 
							
								<a href="#host-metadata">Host Metadata</a><br>
							 | 
						||
| 
								 | 
							
								<a href="#view-child-metadata">View and Child Metadata</a><br>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<hr>
							 | 
						||
| 
								 | 
							
								<h4 id="class-metadata">Classes and Class Metadata</h4>
							 | 
						||
| 
								 | 
							
								<hero-view></hero-view>
							 | 
						||
| 
								 | 
							
								<hero-lifecycle></hero-lifecycle>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<hr>
							 | 
						||
| 
								 | 
							
								<h4 id="io-metadata">Input and Output Metadata</h4>
							 | 
						||
| 
								 | 
							
								<hero-io></hero-io>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<hr>
							 | 
						||
| 
								 | 
							
								<h4 id="dependency-injection">Dependency Injection</h4>
							 | 
						||
| 
								 | 
							
								<hero-di></hero-di>
							 | 
						||
| 
								 | 
							
								<hero-di-inject></hero-di-inject>
							 | 
						||
| 
								 | 
							
								<hero-di-inject-additional></hero-di-inject-additional>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<hr>
							 | 
						||
| 
								 | 
							
								<h4 id="host-metadata">Host Metadata</h4>
							 | 
						||
| 
								 | 
							
								<hero-host></hero-host>
							 | 
						||
| 
								 | 
							
								<hero-host-meta></hero-host-meta>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<hr>
							 | 
						||
| 
								 | 
							
								<h4 id="view-child-metadata">View and Child Metadata</h4>
							 | 
						||
| 
								 | 
							
								<hero-queries></hero-queries>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<!-- 
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								-->"><input type="hidden" name="files[app/confirm.component.html]" value="<button (click)="onOkClick()">
							 | 
						||
| 
								 | 
							
								  {{okMsg}}
							 | 
						||
| 
								 | 
							
								</button>
							 | 
						||
| 
								 | 
							
								<button (click)="onNotOkClick()">
							 | 
						||
| 
								 | 
							
								  {{notOkMsg}}
							 | 
						||
| 
								 | 
							
								</button>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<!-- 
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								-->"><input type="hidden" name="files[app/hero-title.component.html]" value="<h1>{{titlePrefix}} {{title}}</h1>
							 | 
						||
| 
								 | 
							
								<button (click)="ok()">OK</button>
							 | 
						||
| 
								 | 
							
								<p>{{ msg }}</p>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<!-- 
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								-->"><input type="hidden" name="files[index.html]" value="<!DOCTYPE html>
							 | 
						||
| 
								 | 
							
								<html>
							 | 
						||
| 
								 | 
							
								  <head>
							 | 
						||
| 
								 | 
							
								    <script>document.write('<base href="' + document.location + '" />');</script>
							 | 
						||
| 
								 | 
							
								    <meta charset="UTF-8">
							 | 
						||
| 
								 | 
							
								    <meta name="viewport" content="width=device-width, initial-scale=1">
							 | 
						||
| 
								 | 
							
								    <link rel="stylesheet" href="styles.css">
							 | 
						||
| 
								 | 
							
								    <title>TypeScript to JavaScript</title>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    <!-- Polyfills -->
							 | 
						||
| 
								 | 
							
								    <script src="https://unpkg.com/core-js/client/shim.min.js"></script>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    <script src="https://unpkg.com/zone.js@0.7.4?main=browser"></script>
							 | 
						||
| 
								 | 
							
								    <script src="https://unpkg.com/systemjs@0.19.39/dist/system.src.js"></script>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    <script src="https://cdn.rawgit.com/angular/angular.io/b3c65a9/public/docs/_examples/_boilerplate/systemjs.config.web.js"></script>
							 | 
						||
| 
								 | 
							
								    <script>
							 | 
						||
| 
								 | 
							
								      System.import('main.js').catch(function(err){ console.error(err); });
							 | 
						||
| 
								 | 
							
								    </script>
							 | 
						||
| 
								 | 
							
								  </head>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  <body>
							 | 
						||
| 
								 | 
							
								    <my-app>Loading...</my-app>
							 | 
						||
| 
								 | 
							
								  </body>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</html>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<!-- 
							 | 
						||
| 
								 | 
							
								Copyright 2016 Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								Use of this source code is governed by an MIT-style license that
							 | 
						||
| 
								 | 
							
								can be found in the LICENSE file at http://angular.io/license
							 | 
						||
| 
								 | 
							
								-->"><input type="hidden" name="tags[0]" value="angular"><input type="hidden" name="tags[1]" value="example"><input type="hidden" name="tags[2]" value="cookbook"><input type="hidden" name="private" value="true"><input type="hidden" name="description" value="Angular Example - TypeScript to JavaScript"></form><script>document.getElementById("mainForm").submit();</script></body></html>
							 |