2016-04-04 6 views
12

Ich versuche, einen gemeinsamen Dienst zu bauen, wiebehaviourSubject in angular2, wie es funktioniert und wie man es benutzt

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

Ich weiß nicht, wie BehaviourSubject zu implementieren im Grunde, was ich hier versuchen, ist nur ein Chaos ich denke, und ich diesen Wert in geordnete Komponente Aufruf von

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

die als .Single einen Fehler wirft()/last() usw., was auch immer verfügbar ist, so kann jemand mir keine Funktion zeigen, wie es tatsächlich funktioniert und wie man es implementiert, als ich nach den Beispielen suchte, aber keiner macht Sinn für mich.

Antwort

19

Reduziert auf eine Eigenschaft sollte es so aussehen. Ich änderte SharedService-string, weil es nicht Sinn für mich eine Art XxxService für ein Ereignis Wert mit dem Namen zu verwenden:

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

und wie Sie den Wert es retrive ?? 'console.log ('behiob' + shared.space.single());' – Ironsun

+0

Ich habe meine Antwort aktualisiert. –

+0

Sie könnten nur auf vorherige Frage geantwortet haben .... trotzdem vielen Dank: d – Ironsun

Verwandte Themen