2016-10-30 15 views
10

मैं इस official cookbook द्वारा कोणीय 2 सीख रहा हूं।Angular2 में 'rxjs/विषय' क्या है?

नीचे दिया गया कोड अचानक अचानक दिखाई देता है। क्यों "मिशनअनुवादित $" में एक परिवर्तनीय घोषणा नहीं है? मिशन को $ = $ नीचे दिए गए कोड का तर्क क्या है?

import { Injectable } from '@angular/core'; 
import { Subject } from 'rxjs/Subject'; 
@Injectable() 
export class MissionService { 
    // Observable string sources 
    private missionAnnouncedSource = new Subject<string>(); 
    private missionConfirmedSource = new Subject<string>(); 
    // Observable string streams 
    missionAnnounced$ = this.missionAnnouncedSource.asObservable(); 
    missionConfirmed$ = this.missionConfirmedSource.asObservable(); 
    // Service message commands 
    announceMission(mission: string) { 
    this.missionAnnouncedSource.next(mission); 
    } 
    confirmMission(astronaut: string) { 
    this.missionConfirmedSource.next(astronaut); 
    } 
} 
+2

https://github.com/Reactive-Extensions/RxJS – zerkms

उत्तर

19

एक Observable केवल, सदस्यता लेने के लिए अनुमति देता है, जबकि एक Subject दोनों प्रकाशन और सदस्यता लेने (एक विषय एक मानने योग्य है) के लिए अनुमति देता है। तो Subject का उपयोग करके आपकी सेवा को एक प्रकाशक और दोनों ग्राहक के रूप में उपयोग करने की अनुमति मिलती है।

@Component({}) 
class ComponentOne { 
    constructor(private service: MissionService) {} 

    onClick() { 
    service.announceMission('mission started'); 
    } 
} 

@Component({}) 
class ComponentTwo { 
    constructor(private service: MissionService) { 
    service.missionAnnounced$.subscribe(mission => console.log(mission)) 
    } 
} 

@Component({}) 
class ComponentThree { 
    constructor(private service: MissionService) { 
    service.missionAnnounced$.subscribe(mission => console.log(mission)) 
    } 
} 

अब हर कोई जो मिशन की सदस्यता लेने की इच्छा करता है, घोषित कार्यक्रम केवल सब्सक्राइब कर सकता है। ComponentOne मिशन घोषित कार्यक्रम को उत्सर्जित करने वाला एक होगा।

क्यों "मिशनअनुवादित $" में एक परिवर्तनीय घोषणा नहीं है?

ऐसा करता है। missionAnnounced$ वैरिएबल नाम है, इसे Subject को अपने अवलोकननीय रूप में असाइन किया जा रहा है। कक्षा सदस्य चर का उपयोग let

नीचे दिए गए कोड का तर्क क्या नहीं है?

सदस्य, observables ($ चर) की सदस्यता के प्रकाशकों फोन जबकि announceMission और confirmMissionmissionAnnounced$ और missionConfirmed$ पर सभी ग्राहक क्रमशः उन घटनाओं को प्राप्त करेंगे।

4

पिछले जवाब की मदद के लिए आप निम्नलिखित अतः कड़ी में पर्याप्त विवरण मिल जाएगा: What are the semantics of different RxJS subjects?

संक्षेप में, एक Rxjs विषय को लागू करता है दोनों Observable, और Observer इंटरफेस (के बारे में अधिक जानकारी के लिए लिंक देखें विषय के विभिन्न स्वाद और व्यवहार)। यहां इस्तेमाल किया जाने वाला मानक विषय पाइप के रूप में कार्य करता है, और Observable इंटरफ़ेस से गुज़रता है जो उसके Observer इंटरफ़ेस पर प्राप्त होने वाले सभी मानों को पार करता है। asObservable कोड में दिखाई देने वाली फ़ंक्शन कॉल Observer इंटरफ़ेस के कार्यान्वयन को छुपाती है, इसलिए जब आप इसे भी नहीं मानते हैं तो आप अनजाने में इसका उपयोग नहीं कर सकते हैं, यानी आप तब भी इस विषय का उपयोग कर सकते हैं जब आप नियमित रूप से देखने योग्य उपयोग करते हैं।