2016-07-14 27 views
5

में एक साथ कई ऑब्जर्वेबल को कैसे गठबंधन करना है, इसलिए मैंने अभी कोणीय 2 के साथ प्रोग्रामिंग शुरू कर दी है और बस सदस्यता, विषय और व्यवहार विषय के बारे में सीखने पर शुरुआत की है। वर्तमान में मेरी सेवा में संग्रहीत मूल्यों को प्राप्त करने और एक घटक को उत्सर्जित करने के लिए मेरे पास एकाधिक सदस्यताएं हैं। मेरा आवेदन काम करता है और सब कुछ लेकिन मुझे पता है कि यह बहुत अक्षम है।कोणीय 2

this.threatService.minLimitChange$.subscribe(min => { this.min = min; this.getSession();}); 
this.threatService.maxLimitChange$.subscribe(max => { this.max = max; this.getSession();}); 

(और इस तरह 5 अन्य अधिक है कि एक ही मान प्राप्त और समारोह getSession() हर बार कॉल) मेरी threat.service में

:

यह हाथ से मेरी घटक में हो गया है कि
private minLimitChangeSource = new BehaviorSubject<number>(this.min); 
private maxLimitChangeSource = new BehaviorSubject<number>(this.max); 
minLimitChange$ = this.minLimitChangeSource.asObservable(); 
maxLimitChange$ = this.maxLimitChangeSource.asObservable(); 

तो मैं कोशिश की है:

this.threatService.minLimitChange$.concat(this.threatService.maxLimitChange$).subscribe(res => console.log(res)); 

कौन सा मेरा उद्देश्य सिर्फ रेस परीक्षण करने के लिए था ऐसा इसलिए था क्योंकि मुझे यकीन नहीं था कि दो मूल्यों का उपयोग कैसे करें ... लेकिन मुझे यह मेरे कंसोल में मिल रहा है। ;/

TypeError: this.threatService.minLimitChange$.merge is not a function. (In 'this.threatService.minLimitChange$.concat(this.threatService.maxLimitChange$)', 'this.threatService.minLimitChange$.concat' is undefined) 

अंत में, मैं सभी मूल्यों कि getSession() मेरी सेवा से जरूरत हो और कि समारोह चलाने एक बार करना चाहते हैं। मैं वास्तव में मेरी सदस्यता को गठबंधन करने के लिए concat, merge या forkJoin का उपयोग करने के तरीके पर किसी भी मदद या स्पष्टीकरण की सराहना करता हूं। धन्यवाद!

उत्तर

10

आप एक में 2 नमूदार धाराओं गठबंधन करने के लिए Observable.combineLatest उपयोग कर सकते हैं:

combineObs = obs1.combineLatest(obs2, 
    (val1, val2) => { 
    return {val1: val1, val2: val2}; 
    }); 

कार्य plunker: http://plnkr.co/edit/mmCzEmdKexpaWNM53me9?p=preview

+0

आह मैं देख रहा हूँ! हालांकि मैं जो चाहता हूं उसके करीब लगता है, मैं HTML में {{}} विधि के माध्यम से मानों का उपयोग नहीं करता हूं। मेरा आवेदन वास्तव में एक चार्ट जेनरेटर है जो यूआई घटक में स्लाइडर के अनुसार डेटा पॉइंट दिखाता है। तो डेटा बहता है: ** यूआई घटक में स्लाइडर ** अधिकतम और न्यूनतम मान भेजता है> ** सेवा ** ग्राहकों को स्टोर और उत्सर्जित करता है> ** चार्ट घटक ** उन मानों के साथ एक फ़ंक्शन चलाता है। तो यदि मैं अपने चार्ट घटक में combineLatest रखना था, तो मैं इसे घटक के अधिकतम और न्यूनतम मानों में स्थानीय रूप से कैसे असाइन करूं? – mshantic

+0

अरे संलग्न plnkr लिंक की जांच करें। मूल रूप से विचार आपके कार्य को 2 चरणों में प्राप्त करना है: 1. दो धाराओं को एक में संयोजित करें, तीसरी धारा प्रत्येक बार स्रोत स्ट्रीम के नए मूल्य के साथ एक नया मान उत्सर्जित करेगी; 2. संयुक्त स्ट्रीम को सुनें और संयुक्त डेटा के आधार पर अपने स्थानीय डेटा को पॉप्युलेट करें। मैंने plnkr में दोनों का प्रदर्शन किया है। –

+1

धन्यवाद! यह गायों का काम करता है और बहुत सारे अनावश्यक कोड पर काटा जाता है। खो गया था क्योंकि मेरे पास सेटिंग्स जैसी कक्षा नहीं थी और मेरे पास एक अलग सेवा और मुख्य घटक था, इसलिए फ़ंक्शन और वेरिएबल आपके प्लंकर की तरह नहीं हैं। लेकिन अब मैं समझता हूं (: धन्यवाद! – mshantic