<!DOCTYPE html>
<html>
<head>
<title>Angular 2 Material Design Lite (angular2-mdl) Plunker</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/typescript/2.0.2/typescript.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/core-js/2.4.1/core.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/zone.js/0.6.23/zone.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
<script>
System.import('main.ts')
.catch(console.error.bind(console));
</script>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="https://code.getmdl.io/1.2.1/material.light_blue-amber.min.css" />
</head>
<body>
<demo-app>Loading...</demo-app>
<dialog-outlet></dialog-outlet>
</body>
</html>
<mdl-layout mdl-layout-fixed-header mdl-layout-header-seamed>
<mdl-layout-header>
<mdl-layout-header-row>
<mdl-layout-title>Title</mdl-layout-title>
<mdl-layout-spacer></mdl-layout-spacer>
<!-- Navigation. We hide it in small screens. -->
<nav class="mdl-navigation">
<a class="mdl-navigation__link">Link</a>
</nav>
</mdl-layout-header-row>
</mdl-layout-header>
<mdl-layout-drawer>
<mdl-layout-title>Title</mdl-layout-title>
<nav class="mdl-navigation">
<a class="mdl-navigation__link">Link</a>
</nav>
</mdl-layout-drawer>
<mdl-layout-content class="demo-content">
<button
mdl-button
mdl-button-type="raised"
mdl-colored="primary"
mdl-ripple
(click)="testDialog.show()">Open dialog</button>
Counter: {{counter}}
<mdl-dialog #testDialog>
<dialog-content [dialog]="testDialog" (emitter)="onEmitting($event)"></dialog-content>
</mdl-dialog>
</mdl-layout-content>
</mdl-layout>
import { Component } from '@angular/core';
@Component({
selector: 'demo-app',
templateUrl: 'app.component.html',
styles: [
`
.demo-content {
padding: 12px;
}
`
]
})
export class AppComponent {
public checkbox1 = true;
public radioOption = '1';
public counter = 0;
onEmitting(justANumber){
this.counter += justANumber;
}
}
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { MdlModule } from 'angular2-mdl';
import { AppComponent } from './app.component';
import { DialogContentComponent } from './dialog-content.component';
@NgModule({
imports: [
BrowserModule,
FormsModule,
MdlModule
],
declarations: [AppComponent, DialogContentComponent],
bootstrap: [AppComponent],
providers: []
})
export class AppModule {}
platformBrowserDynamic().bootstrapModule(AppModule);
Demo Plunkr for angular2-mdl.
for stackoverflow question: http://stackoverflow.com/questions/39913676/eventemitter-in-custom-dialog-component
System.config({
transpiler: 'typescript',
typescriptOptions: {
emitDecoratorMetadata: true
},
packages: {
'.': {
defaultExtension: 'ts'
}
}
});
var map = {
'@angular': 'https://unpkg.com/@angular',
'angular2-mdl': 'https://unpkg.com/angular2-mdl@latest/bundle/angular2-mdl.js',
'rxjs': 'https://unpkg.com/rxjs',
'main': 'main.js'
};
var packages = {
}
System.config({
map: map,
packages: packages
});
<p>
<button
mdl-button
mdl-button-type="raised"
mdl-colored="primary"
mdl-ripple
(click)="fireEvent()">Fire event</button>
<button
mdl-button
mdl-button-type="raised"
mdl-colored="accent"
mdl-ripple
(click)="closeDialog()">Close dialog </button>
</p>
import { Component, Output, EventEmitter, Input } from '@angular/core';
import { MdlDialogComponent } from 'angular2-mdl';
@Component({
selector: 'dialog-content',
templateUrl: 'dialog-content.component.html'
})
export class DialogContentComponent {
@Output() emitter = new EventEmitter();
@Input() dialog: MdlDialogComponent;
// or this way: constructor(private dialog: MdlDialogComponent){}
fireEvent() {
this.emitter.emit(1);
}
closeDialog() {
this.dialog.close();
}
}