<!DOCTYPE html>
<html>
<head>
<title>Angular 2 Components - Projection</title>
<script src="https://npmcdn.com/systemjs@0.19.6/dist/system.src.js"></script>
<script src="https://code.angularjs.org/tools/typescript.js"></script>
<script src="system.config.js"></script>
</head>
<body>
<app>Loading...</app>
<script>
System.import('app');
</script>
</body>
</html>
var angularVersion = '2.0.0-rc.1';
System.config({
baseUrl: '/',
paths: {
'npmcdn:*': 'https://npmcdn.com/*'
}
});
System.config({
transpiler: 'typescript',
typescriptOptions: { emitDecoratorMetadata: true },
meta: {
'*': {
deps: [ 'zone.js', 'reflect-metadata' ]
}
}
});
System.config({
packageConfigPaths: [
"npmcdn:@*/*/package.json"
],
map: {
'@angular/core': 'npmcdn:@angular/core@'+angularVersion,
'@angular/compiler': 'npmcdn:@angular/compiler@'+angularVersion,
'@angular/common': 'npmcdn:@angular/common@'+angularVersion,
'@angular/platform-browser': 'npmcdn:@angular/platform-browser@'+angularVersion,
'@angular/platform-browser-dynamic': 'npmcdn:@angular/platform-browser-dynamic@'+angularVersion,
'rxjs': 'npmcdn:rxjs@5.0.0-beta.6',
'zone.js': 'npmcdn:zone.js@0.6.12',
'reflect-metadata': 'npmcdn:reflect-metadata@0.1.3',
"crypto": "@empty"
},
packages: {
'app': {
defaultExtension: 'ts',
main: './index.ts'
}
}
});
import { bootstrap } from '@angular/platform-browser-dynamic';
import { App } from './app.component.ts';
bootstrap(App);
import {Component} from '@angular/core';
import {ChildSelect} from './child-select.component';
import {Child} from './child.component';
@Component({
selector: 'app',
template: `
<div style="border: 2px solid black; padding: 1rem;">
<h4>App Component</h4>
<child>
<p>My <i>projected</i> content.</p>
<p>
<b>Count:</b> {{ count }} <br/>
<b>Child Count:</b> {{ childCount || 'N/A' }}
</p>
</child>
<child-select>
<section>Section Content</section>
<div class="class-select">
div with .class-select
</div>
<footer>Footer Content</footer>
<header>Header Content</header>
</child-select>
</div>
`,
directives: [Child, ChildSelect]
})
export class App {
count: number = 12;
}
import {Component} from '@angular/core';
@Component({
selector: 'child-select',
template: `
<div style="border: 2px solid red; padding: 1rem; margin: 2px;">
<h4>Child Component with Select</h4>
<div style="border: 2px solid orange; padding: 1rem; margin: 2px">
<ng-content select="header"></ng-content>
</div>
<div style="border: 2px solid green; padding: 1rem; margin: 2px">
<ng-content select="section"></ng-content>
</div>
<div style="border: 2px solid pink; padding: 1rem; margin: 2px">
<ng-content select=".class-select"></ng-content>
</div>
<div style="border: 2px solid purple; padding: 1rem; margin: 2px">
<ng-content select="footer"></ng-content>
</div>
</div>
`
})
export class ChildSelect {
}
import {Component} from '@angular/core';
@Component({
selector: 'child',
template: `
<div style="border: 2px solid blue; padding: 1rem; margin: 2px;">
<h4>Child Component</h4>
<ng-content></ng-content>
</div>
`
})
export class Child {
childCount: number = 24;
}