angular - BehaviourSubject:s distinctUntilChanged() är inte en funktion
Jag är ny på Rxjs och försöker förstå BehaviourSubject. Nedan är min kod
export interface State {
items: Items[]
}
const defaultState = {
items: []
};
const _store = new BehaviorSubject<State>(defaultState);
@Injectable()
export class Store {
private _store = _store;
changes = this._store.distinctUntilChanged()
.do(() => console.log('changes'));
setState(state: State) {
this._store.next(state);
}
getState() : State {
return this._store.value;
}
purge() {
this._store.next(defaultState);
}
}
När jag kör mitt projekt får jag det här felet i min konsol
platform-browser.umd.js:1900 EXCEPTION: Error: Uncaught (in promise):
EXCEPTION: Error during instantiation of Store! (StoreHelper -> Store).
ORIGINAL EXCEPTION: TypeError: this._store.distinctUntilChanged is not a function
Kan någon hjälpa mig. Dessutom försöker jag skapa en butik för mina modellobjekt, så om det finns något annat enklare sätt är du välkommen att föreslå det.
All hjälp uppskattas.
Svar #1
du måste importera hela rxJs-biblioteket eller det specifika för detta.
import 'rxjs/add/operator/distinctUntilChanged';
Uppdatera rxjs > 5.5 med Pipbara operatorer,
import { distinctUntilChanged } from 'rxjs/operators';
Pipebara operatörer hjälper till med byggande och tree shaking.
För att lära dig mer om fördelarna med rörbara operatorer kan du titta här.
Hoppas det här hjälper!!
Svar #2
Du måste faktiskt importera alla operatorer (det är do och distinctUntilChanged) och BehaviorSubject också.
import 'rxjs/add/operator/distinctUntilChanged';
import 'rxjs/add/operator/do';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
Se plnkr-demo: http://plnkr.co/edit/Wbqv95EiG8BnzC8BpD7E?p=preview
Förresten, jag skulle vara försiktig med uttalanden som private _store=_store eftersom det gör det väldigt svårt att läsa även om det gör det du vill.
Detta genereras från https://www.typescriptlang.org/play/.
define(["require", "exports"], function (require, exports) {
"use strict";
var _store = new BehaviorSubject(defaultState);
var Store = (function () {
function Store() {
this._store = _store;
this.changes = this._store.distinctUntilChanged()
.do(function () { return console.log('changes'); });
}
Store.prototype.setState = function (state) {
console.log(_store);
this._store.next(state);
};
Store.prototype.getState = function () {
return this._store.value;
};
Store.prototype.purge = function () {
this._store.next(defaultState);
};
return Store;
}());
exports.Store = Store;
});
