Angular 2 为 Observable 导入共享运算符
Angular 2 import shared operator for Observable
我正在尝试对观察者使用 shared
运算符,但它不起作用:
我的ts代码:
import { Injectable } from '@angular/core';
import { Observer } from 'rxjs/observer';
import { Observable } from 'rxjs/observable';
import 'rxjs/add/operator/share';
@Injectable()
export class LoadingService {
private _observer: Observer<string>;
loading$: Observable<string>;
constructor() {
this.loading$ = new Observable<string>(
observer => this._observer = observer).share();
}
toggleLoadingIndicator(name) {
if (this._observer) {
this._observer.next(name);
}
}
}
当我调用 .share();
时出现错误:TypeError: (intermediate value).share is not a function.
在其他情况下,我成功导入了例如地图运算符,并像这样正常使用:
import 'rxjs/add/operator/map';
this._http.get(this._url, {
headers: this._headers
}).map(r => r.json()).subscribe(json => {
console.log(json);
this.isValid = true;
});
因此,即使我尝试使用 map
运算符来验证导入,在第一种情况下 this.loading$ = new Observable<string>(observer => this._observer = observer).map(n => n);
我也会遇到同样的错误。
所以,我不知道为什么,但是当我从 'rxjs/Rx'
导入时,它起作用了:
import { Observable, Observer } from 'rxjs/Rx';
iuristona 的答案有效,但这只是因为您要导入整个库:
import { Observable } from 'rxjs/Rx';
通过仅从 'rxjs/Observable' 模块导入,您只导入了几个方法。移动用户会喜欢只导入您需要的方法而不是整个库。你可以这样做:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/debounceTime'; // added method
import 'rxjs/add/operator/map'; // added method
希望对您有所帮助。
我正在尝试对观察者使用 shared
运算符,但它不起作用:
我的ts代码:
import { Injectable } from '@angular/core';
import { Observer } from 'rxjs/observer';
import { Observable } from 'rxjs/observable';
import 'rxjs/add/operator/share';
@Injectable()
export class LoadingService {
private _observer: Observer<string>;
loading$: Observable<string>;
constructor() {
this.loading$ = new Observable<string>(
observer => this._observer = observer).share();
}
toggleLoadingIndicator(name) {
if (this._observer) {
this._observer.next(name);
}
}
}
当我调用 .share();
时出现错误:TypeError: (intermediate value).share is not a function.
在其他情况下,我成功导入了例如地图运算符,并像这样正常使用:
import 'rxjs/add/operator/map';
this._http.get(this._url, {
headers: this._headers
}).map(r => r.json()).subscribe(json => {
console.log(json);
this.isValid = true;
});
因此,即使我尝试使用 map
运算符来验证导入,在第一种情况下 this.loading$ = new Observable<string>(observer => this._observer = observer).map(n => n);
我也会遇到同样的错误。
所以,我不知道为什么,但是当我从 'rxjs/Rx'
导入时,它起作用了:
import { Observable, Observer } from 'rxjs/Rx';
iuristona 的答案有效,但这只是因为您要导入整个库:
import { Observable } from 'rxjs/Rx';
通过仅从 'rxjs/Observable' 模块导入,您只导入了几个方法。移动用户会喜欢只导入您需要的方法而不是整个库。你可以这样做:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/debounceTime'; // added method
import 'rxjs/add/operator/map'; // added method
希望对您有所帮助。