Ich bin neu in TypeScript, und ehrlich gesagt, mache ich das vielleicht falsch. Aber ... Ich versuche einen "KeyUp Listener" für Textboxen zu erstellen, die "benachrichtigen" wenn der Benutzer die Eingabe beendet hat. Aber wenn ich versuche, um die Klasse zu registrieren, erhalte ich folgende Fehlermeldung:ReferenceError: HTMLElement ist nicht in TypeScript definiert
Exception: Call to Node module failed with error: Prerendering failed because of error: ReferenceError: HTMLElement is not defined
ANMELDUNG:
// MODULES
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { UniversalModule } from 'angular2-universal';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
// COMPONENTS
import { AppComponent } from './components/app/app.component'
import { HeaderComponent } from './components/shared/components/shared-header.component';
import { SampleIndexComponent } from './components/samples/sample.index.component';
import { SampleFormComponent } from './components/samples/sample.form.component';
import { StatusFilterComponent } from './components/samples/filters/status-filter.component';
import { AuthorFilterComponent } from './components/samples/filters/author-filter.component';
// LISTENERS
import { TextboxKeyUpListener } from "./components/shared/services/textbox.keyup.listener";
@NgModule({
bootstrap: [ AppComponent ],
declarations: [
AppComponent,
HeaderComponent,
SampleIndexComponent,
StatusFilterComponent,
AuthorFilterComponent,
SampleFormComponent
],
imports: [
UniversalModule, // <-- Must be first import. This automatically imports BrowserModule, HttpModule, and JsonpModule too.
FormsModule,
ReactiveFormsModule,
RouterModule.forRoot([
{ path: '', redirectTo: 'samples', pathMatch: 'full' },
{ path: 'samples', component: SampleIndexComponent },
{ path: 'form', component: SampleFormComponent },
{ path: '**', redirectTo: 'samples' }
])
],
providers: [AuthorFilterNotifier, StatusFilterNotifier, TextboxKeyUpListener]
})
export class AppModule
{
constructor() { }
}
NOTIFIER wie folgt aussieht:
// MODULES
import { Injectable, Inject } from '@angular/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class TextboxKeyUpListener {
// CONSTRUCTORS
constructor(private textbox: HTMLInputElement)
{
this.init();
}
// PROPERTIES - private
private typingTimer: NodeJS.Timer;
private typingTimerInterval: number = 1000;
private notifyDoneTyping = new Subject<string>();
// PROPERTIES - public
public notifyDoneTyping$ = this.notifyDoneTyping.asObservable();
// METHODS - public
private keyUp(ev: KeyboardEvent)
{
global.clearTimeout(this.typingTimer);
if(this.textbox.value)
this.typingTimer = global.setTimeout(this.notify, this.typingTimerInterval);
}
// METHODS - private
private init()
{
this.textbox.onkeyup = this.keyUp;
}
private notify()
{
this.notifyDoneTyping.next(this.textbox.value);
console.log("Done Typing")
}
}
Tut mir leid ... aber das ist schon in meiner TS.CONFIG ... Danke für die Hilfe –
Auch ... sieht der "Listener" -Code so aus, als wäre ich auf dem richtigen Weg? –
Nun, da ich den Code mehr im Detail anschaue, habe ich ein paar Fragen (bedenke, dass ich Universal nicht kenne, daher sind meine Fragen sehr unangebracht). Warum ist der Listener ein Injectable (was etwas bedeutet, das als Dienst in Komponenten und/oder andere Dienste eingefügt werden kann)? Ist die Absicht des Hörers zu emittieren, wenn innerhalb von 1 Sekunde kein keyUp-Ereignis erfasst wird? – Picci