2016-07-09 21 views
5

में किसी ऑब्जेक्ट प्रॉपर्टी में बदलाव को देखते हुए मैंने हाल ही में कोणीय 1 से एंगुलर 2 में स्थानांतरित किया है और अक्सर किसी ऑब्जेक्ट की संपत्ति में बदलाव का पता लगाने की कोशिश करने वाले मुद्दों में भाग लेता है (कुछ पिछली बार $ घड़ी के माध्यम से किया जाता है)।एंगुलर 2

विशिष्ट प्रयोग मामला है कि मैं एक इंजेक्शन सेवा है कि, उदाहरण के लिए एक वस्तु सेटिंग्स युक्त डेटा का एक टुकड़ा का कहना है:

@Injectable() 
export class SettingsService 
{ 
    _settings = { 
     'settingA' : true, 
     'settingB' : false 
    } 

    ... 

    get settings() 
    { 
     return this._settings; 
    } 
} 

मैं तो एक घटक होगा इस तरह के एक सेटिंग पृष्ठ में के रूप में कि सेटिंग सेवा से सेटिंग्स मिल जाएगा एक ईओण एप्लिकेशन: किसी toggle की तरह एक UI घटक को

constructor(private settingsService : SettingsService) 
{ 
    this.settings = settingsService.settings; 
} 

और सीधे जोड़ी वस्तु गुण। समस्या प्रत्येक टॉगल परिवर्तन ईवेंट पर फ़ंक्शन को कॉल करने के अलावा अन्य है, या तो सेवा या घटक कैसे पता लगा सकता है कि सेटिंग ऑब्जेक्ट को एक उचित कार्रवाई को ट्रिगर करने के लिए बदल दिया गया है जैसे डेटा स्टोर में सेटिंग्स को सहेजना?

उत्तर

6

एक अवलोकन योग्य डेटा सेवा बनाने के लिए आप से BehaviorSubject का उपयोग कर सकते हैं। आप अपनी सेवा में एक विषय बनाते हैं और फिर आपको अपने घटकों में इस विषय की सदस्यता लेनी होगी।

इसके साथ सेवाओं को बनाने के बारे में कुछ ट्यूटोरियल के लिए यहां एक नज़र डालें: example 1, example 2

आपके पास सैद्धांतिक रूप से आपकी सेवा में EventEmitter का उपयोग करने का अवसर है। लेकिन आपको इसका इस्तेमाल नहीं करना चाहिए। अधिक जानकारी के लिए इस answer पर एक नज़र डालें। इस जवाब में आप भी पा सकते हैं एक उदाहरण कैसे BehaviorSubject

+0

यह एक BehaviorSubject का उपयोग कर रहा है के बजाय Observable उपयोग करने के साथ इसे हल करने की अभी भी एक समारोह कॉल की आवश्यकता है जब टॉगल बस सेवा में परिवर्तन लेने के लिए सक्षम किया जा रहा बजाय राज्य में परिवर्तन । हालांकि EventEmitter का उपयोग करने पर अच्छे नोट्स, मैंने सेवाओं में डेटा अपडेट के घटकों को सूचित करने के लिए उन्हें कहीं और इस्तेमाल किया है। – cubiclewar