48 lines
1.0 KiB
TypeScript
48 lines
1.0 KiB
TypeScript
// #docregion
|
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
|
|
import { RestoreService } from './restore.service';
|
|
import { Hero } from './hero';
|
|
|
|
@Component({
|
|
selector: 'hero-editor',
|
|
// #docregion providers
|
|
providers: [RestoreService],
|
|
// #enddocregion providers
|
|
template: `
|
|
<div>
|
|
<span>Name:</span>
|
|
<input [(ngModel)]="hero.name"/>
|
|
<div>
|
|
<button (click)="onSaved()">save</button>
|
|
<button (click)="onCanceled()">cancel</button>
|
|
</div>
|
|
</div>`
|
|
})
|
|
|
|
export class HeroEditorComponent {
|
|
@Output() canceled = new EventEmitter();
|
|
@Output() saved = new EventEmitter();
|
|
|
|
constructor(private restoreService: RestoreService<Hero>) {}
|
|
|
|
@Input()
|
|
set hero (hero: Hero) {
|
|
this.restoreService.setItem(hero);
|
|
}
|
|
|
|
get hero () {
|
|
return this.restoreService.getItem();
|
|
}
|
|
|
|
onSaved () {
|
|
this.saved.next(this.restoreService.getItem());
|
|
}
|
|
|
|
onCanceled () {
|
|
this.hero = this.restoreService.restoreItem();
|
|
this.canceled.next(this.hero);
|
|
}
|
|
}
|
|
// #enddocregion
|