2017-04-12 1 views
0

Ich stoße auf ein seltsames Problem mit meiner benutzerdefinierten Klasse in angular2 nach dem Passieren durch eine Observable-Kette.Klasse fehlt Methoden nach bestanden in Observable Kette

ich den Fehler immer erhalten:

EXCEPTION: f.mapToParams is not a function 
ORIGINAL STACKTRACE: 
TypeError: f.mapToParams is not a function 
    at SafeSubscriber._next (filter.component.ts) 
    ... 
Uncaught TypeError: f.mapToParams is not a function 
    at Safesubscriber._next (filter.component.ts) 

Hier ist meine Codierung:

filter.ts:

import { Params } from '@angular/router'; 

export class Filter { 
    public text:String = ''; 
    public mapToParams():Params { 
    let params:Params = {}; 
    // Do some mapping here... 
    return params; 
    } 
} 

filter.component.ts

import { Component, OnInit Output, EventEmitter } from '@angular/core'; 
import { Router, Params } from '@angular/router'; 
import { Filter } from './filter'; 
import { Observable, Subject } from 'rxjs/Rx'; 

export class FilterComponent implements OnInit { 

    private _filter:Filter; 
    private _filterStream = new Subject<Filter>(); 

    ngOnInit() { 
    this._filter = new Filter(); 
    this._filterStream 
     .debounceTime(300) 
     .switchMap((f:Filter) => Observable.of(f)) 
     .subscribe((f:Filter) => { 
     let params:Params = {}; 
     console.log(f.text);   // <-- No problem here 
     // params = this._map(f);   // <-- This would work 
     params = f.mapToParams();  // <-- Here occurs the error 
     }); 
    } 

    private _map(f:Filter):Params { 
    // Do some mapping here 
    } 

    public onInputChanged(searchText:String):void { 
    this._mergeFilter({ 
     map(f:Filter) { 
     f.text = searchText; 
     } 
    }) 
    } 

    private _mergeFilter(callback:FilterMergeCallback):void { 
    let f:Filter = JSON.parse(JSON.stringify(this._filter)); 
    callback.map(f); 
    this._filterStream.next(f); 
    } 

} 

I habe versucht, die 0 zu kommentierenund switchMap Aussage aber ohne Erfolg.

An einem anderen Punkt in meiner Codierung kann die filter.mapToParams-Methode ohne Probleme aufgerufen werden. Es scheint mir, als würde die Observable-Kette alle Methoden von meinem Objekt entfernen.

Hier ist meine Winkel config:

  • @ Winkel/cli: 1.0.0.-beta.32.3
  • @ Winkel/common: ^2.4.0
  • @ Winkel/Compiler ^2.4.0
  • @ Winkel/Kern ^2.4.0
  • rxjs: ^5.1.0

Kann mir jemand dabei helfen?

+0

Was ist die genaue Fehlermeldung? –

+0

Bitte siehe oben. Habe einige weitere Fehleranweisungen hinzugefügt. – XcodeJunkie

+0

Wie sieht der Code aus, wo Sie einen Wert mit '_filterStream' ausgeben? (auch 'neues Thema ()' sollte 'neues Thema sein ()' mit Großbuchstaben 'S') –

Antwort

0

Ich glaube, ich habe es:

ich das aktuelle _filter Objekt auf eine neue Filtervariable kopiert von

JSON.parse(JSON.stringify()) 

Damit wird alle Methoden erhalten aus dem neuen Objekt abgezogen.

Mittel, ich habe eine neue Methode zu finden, um das Objekt zu klonen ...

Dank alle für Sie Antworten!

Verwandte Themen