web-dev-qa-db-fra.com

Sujet dans angular2, comment cela fonctionne et comment l'utiliser

J'essaie de créer un service partagé comme suit

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

Je ne sais pas comment implémenter BehaviourSubject essentiellement ce que j'essaie ici est juste un gâchis je suppose et j'appelle cette valeur dans le composant enfant en utilisant

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

ce qui génère une erreur comme .single ()/last () etc. tout ce qui est disponible n'est pas une fonction, alors quelqu'un peut-il me montrer comment cela fonctionne et comment l'implémenter pendant que je cherche les exemples, mais aucun n'a de sens pour moi.

14
Ironsun

Réduit à une propriété, il devrait ressembler à ceci. J'ai changé SharedService en string car cela n'a pas de sens pour moi d'utiliser un type nommé XxxService pour une valeur d'événement:

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