提问者:小点点

类在可观察链中传递后缺少方法


我在angular2中的自定义类通过可观察链后遇到了一个奇怪的问题。

我总是收到错误:

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)

这是我的编码:

过滤器. ts:

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

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

过滤组件

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);
  }

}

我试图注释掉debounceTimeSwitchMap语句,但没有成功。

在我编码的不同点,可以毫无问题地调用filter. mapToParams方法。在我看来,可观察链从我的对象中剥离了所有方法。

这是我的角度配置:

  • @角/cli:1.0.0.-beta.32.3
  • @角/公共:^2.4.0
  • @角/编译器^2.4.0
  • @角/核心^2.4.0
  • rxjs:^5.1.0

有人能帮我吗?


共1个答案

匿名用户

我想我明白了:

我将当前的_filter对象复制到一个新的过滤器变量

JSON.parse(JSON.stringify())

这样,所有方法都从新对象中剥离。

意思是,我必须找到一种新方法来克隆对象…

感谢大家的回复!