behaviorSubject в angular2, как это работает и как его использовать

Я пытаюсь создать общий сервис следующим образом

import {Injectable,EventEmitter}     from 'angular2/core';
import {Subject} from 'rxjs/Subject';
import {BehaviorSubject} from 'rxjs/subject/BehaviorSubject';
@Injectable()
export class SearchService {

    public country = new Subject<SharedService>();
    public space: Subject<SharedService> = new BehaviorSubject<SharedService>(null);
    searchTextStream$ = this.country.asObservable();

    broadcastTextChange(text: SharedService) {
        this.space.next(text);
        this.country.next(text);
    }
}
export class SharedService {
    country: string;
    state: string;
    city: string;  
    street: string;
}

Я не знаю, как реализовать BehaviourSubject, в основном то, что я пытаюсь здесь, это просто беспорядок, я думаю, и я вызываю это значение в дочернем компоненте, используя

console.log('behiob' + shared.space.single());

который выдает ошибку как .single()/last() и т. д., все, что доступно, не является функцией, поэтому может кто-нибудь показать мне, как это на самом деле работает и как это реализовать, когда я искал примеры, но ни один из них не имеет смысла для меня.


person Ironsun    schedule 04.04.2016    source источник


Ответы (1)


Сведенный к одному свойству, он должен выглядеть так. Я изменил SharedService на string, потому что мне не имеет смысла использовать тип с именем XxxService для значения события:

import {Injectable}     from 'angular2/core';
import {BehaviorSubject} from 'rxjs/BehaviorSubject';

@Injectable()
export class SearchService {

    public space: Subject<string> = new BehaviorSubject<string>(null);

    broadcastTextChange(text:string) {
        this.space.next(text);
    }
}
@Component({
  selector: 'some-component'
  providers: [SearchService], // only add it to one common parent if you want a shared instance
  template: `some-component`)}
export class SomeComponent {
  constructor(searchService: SearchService) {
    searchService.space.subscribe((val) => {
      console.log(val); 
    });
  }
}
person Günter Zöchbauer    schedule 04.04.2016
comment
и как получить значение этого?? console.log('behiob' + shared.space.single()); - person Ironsun; 04.04.2016
comment
Разве это не должно быть space: BehaviorSubject<string> вместо `Subject‹string›? - person Chrillewoodz; 29.11.2016
comment
Это не было намерением. BehaviorSubject является Subject насколько я знаю. - person Günter Zöchbauer; 29.11.2016