<!DOCTYPE html>
<html>
<head>
<title>angular2 playground</title>
<link rel="stylesheet" href="style.css" />
<script src="https://code.angularjs.org/2.0.0-beta.17/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>
System.import('app')
.catch(console.error.bind(console));
</script>
</head>
<body>
<my-app>
loading...
</my-app>
</body>
</html>
/* Styles go here */
### Angular2 Starter Plunker - Typescript - RC.0
A simple plunker demonstrating Angular2 usage:
- Uses SystemJS + TypeScript to compile on the fly
- Includes binding, directives, http, pipes, and DI usage.
System.config({
//use typescript for compilation
transpiler: 'typescript',
//typescript compiler options
typescriptOptions: {
emitDecoratorMetadata: true
},
//map tells the System loader where to look for things
map: {
app: "./src",
'@angular': 'https://npmcdn.com/@angular',
'rxjs': 'https://npmcdn.com/rxjs@5.0.0-beta.6'
},
//packages defines our app package
packages: {
app: {
main: './main.ts',
defaultExtension: 'ts'
},
'@angular/core': {
main: 'bundles/core.umd.js',
defaultExtension: 'js'
},
'@angular/http': {
main: 'index.js',
defaultExtension: 'js'
},
'@angular/compiler': {
main: 'bundles/compiler.umd.js',
defaultExtension: 'js'
},
'@angular/common': {
main: 'bundles/common.umd.js',
defaultExtension: 'js'
},
'@angular/platform-browser-dynamic': {
main: 'bundles/platform-browser-dynamic.umd.js',
defaultExtension: 'js'
},
'@angular/platform-browser': {
main: 'bundles/platform-browser.umd.js',
defaultExtension: 'js'
},
rxjs: {
defaultExtension: 'js'
}
}
});
//main entry point
import { bootstrap } from '@angular/platform-browser-dynamic';
import { HTTP_PROVIDERS } from '@angular/http';
import { App } from './app';
bootstrap(App, [HTTP_PROVIDERS])
.catch(err => console.error(err));
//our root app component
import { Component } from '@angular/core';
import { EnvironmentSelectorComponent } from './environment-selector.component';
import { EnvironmentService } from './environment.service';
@Component({
selector: 'my-app',
template: `<h1>Angular 2 Systemjs start</h1>
{{selectedEnvironment | json}}
<environment [(ngModel)]="selectedEnvironment" [useForm]="false"></environment>
`,
providers: [EnvironmentService],
directives: [EnvironmentSelectorComponent]
})
export class App {
selectedEnvironment = {
"id": "2",
"name": "environment2"
};
}
[{
"id": "2",
"name": "environment2"
},{
"id": "3",
"name": "environment3"
},{
"id": "4",
"name": "environment4"
}]
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
@Injectable()
export class EnvironmentService {
constructor(private http: Http) {}
getEnvironments() {
return this.http.get('src/environments.json')
.map(res => res.json());
}
}
import { Component, Input, Output, OnInit, EventEmitter, Provider, forwardRef } from '@angular/core';
import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/common';
import { Environment } from './environment';
import { EnvironmentService } from './environment.service';
const SELECTOR_VALUE_ACCESSOR: Provider = new Provider(NG_VALUE_ACCESSOR, {
useExisting: forwardRef(() => EnvironmentSelectorComponent),
multi: true
});
@Component({
selector: 'environment',
providers: [SELECTOR_VALUE_ACCESSOR],
template: `
<select [(ngModel)]="selectedEnvironment" (ngModelChange)="onChange($event)"
[ngClass]="{'form-control': useForm}"
class="custom-select">
<option [ngValue]="i" *ngFor="let i of environments">{{i.name}}</option>
</select>`
})
export class EnvironmentSelectorComponent implements OnInit, ControlValueAccessor {
isLoading = true;
staging: Environment = {
id: '1',
name: 'staging'
};
selectedId: any;
selectedEnvironment: Environment;
@Input() useForm = false;
@Output() ngModelChange = new EventEmitter();
onChange(newValue:any) {
this.ngModelChange.emit(this.selectedEnvironment)
}
environments = [this.staging];
constructor(private environmentService: EnvironmentService) { }
ngOnInit(){
this.environmentService.getEnvironments()
.subscribe(environments => {
for (var i = 0; environments.length > i; i++) {
this.environments.push(environments[i])
}
this.selectedEnvironment = this.environments.find(x => x.id === this.selectedId);
},
null,
() => { this.isLoading = false; });
}
onModelChange: Function = () => {};
onModelTouched: Function = () => {};
writeValue(model: Environment) : void {
if(!model) return;
this.selectedId = model.id;
}
registerOnChange(fn: Function): void {
this.onModelChange = fn;
}
registerOnTouched(fn: Function): void {
this.onModelTouched = fn;
}
}
export interface Environment {
id: string,
name: string
}