<!DOCTYPE html>
<html>

<head>
  <title>angular2 playground</title>
      <link rel="stylesheet" href="style.css" />

    <script src="https://code.angularjs.org/2.0.0-beta.7/angular2-polyfills.js"></script>
    <script src="https://code.angularjs.org/tools/system.js"></script>
    <script src="https://code.angularjs.org/tools/typescript.js"></script>
    <script src="config.js"></script>
    <script src="https://code.angularjs.org/2.0.0-beta.7/Rx.js"></script>
    <script src="https://code.angularjs.org/2.0.0-beta.7/angular2.dev.js"></script>
  <script data-require="jasmine" data-semver="2.2.1" src="http://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/jasmine.js"></script>
  <script data-require="jasmine" data-semver="2.2.1" src="http://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/jasmine-html.js"></script>
  <script data-require="jasmine@*" data-semver="2.2.1" src="http://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/boot.js"></script>
  
  <script src="config.js"></script>
  <script>
    System.import('app')
      .catch(console.error.bind(console));
  </script>

</head>

<body>
  <app></app>
</body>

</html>
### Angular2 Starter Plunker - Typescript

A simple plunker demonstrating Angular2 usage:
- Uses SystemJS + TypeScript to compile on the fly
- Includes binding, directives, and DI usage.
System.config({
  //use typescript for compilation
  transpiler: 'typescript',
  //typescript compiler options
  typescriptOptions: {
    emitDecoratorMetadata: true,
    experimentalDecorators: true
  },
  //map tells the System loader where to look for things
  map: {
    app: "./src"
  },
  //packages defines our app package
  packages: {
    app: {
      main: './main.ts',
      defaultExtension: 'ts'
    }
  }
});
import {View, Input, Component,  Directive, ChangeDetectionStrategy, ChangeDetectorRef} from 'angular2/core'
import {bootstrap} from 'angular2/platform/browser'

@Component({selector: 'cmp', changeDetection: ChangeDetectionStrategy.OnPush})
@View({template: `Number of ticks: {{numberOfTicks}}`})
class Cmp {
  numberOfTicks = 0;
  
  constructor(private ref: ChangeDetectorRef) {
    setInterval(() => {
      this.numberOfTicks ++
      this.ref.markForCheck();
    }, 1000);
  }
}

@Component({
  selector: 'giant-list',
  template: `
  <div class="list">
    <ul>
        <li *ngFor="#d of data">
            {{d}}
        </li>
    </ul>
</div>
  `,
})
export class GiantList {
  @Input("data") data;
  constructor(private cd: ChangeDetectorRef) { }
  ngOnInit() {
    this.cd.detach();
    setInterval(() => {
      this.cd.reattach();
      this.cd.detectChanges();
      this.cd.detach();

    }, 1000);
  }
}

@Component({
  selector: 'app',
  changeDetection: ChangeDetectionStrategy.OnPush
})
@View({
  template: `
    <cmp><cmp>
    test
    <giant-list [data]="data"><giant-list>

  `,
  directives: [Cmp, GiantList]
})
class App {
  data = [];
  ngOnInit(){
    let   counter = 0;
    setInterval(() => {
      let newEntry = `${new Date()}:Some data... ${counter++}`;
      this.data = [newEntry, ...this.logs];
    },50);
  }
}

bootstrap(App);


ul
{
    list-style-type: none;
}
li {
    font-size: smaller;
    font-family: monospace;
}

.list {
    height: 300px;
    border: solid;
    border-color: lightgrey;
    border-radius: 2px;
    overflow:hidden;
    overflow-y:scroll;
}