2016-05-11 17 views
7

मेरे पास ऑब्जेक्ट्स की स्ट्रीम है और मुझे तुलना करने की आवश्यकता है कि वर्तमान ऑब्जेक्ट पिछले जैसा नहीं है और इस मामले में नया मान उत्सर्जित करता है। मैंने पाया कि अलग-अलग चेंज ऑपरेटर को वही करना चाहिए जो मैं चाहता हूं, लेकिन किसी कारण से, यह पहले को छोड़कर मूल्य को कभी भी उत्सर्जित नहीं करता है। यदि मैं अलग-अलग हटाता हूं तो चयनित मान सामान्य रूप से उत्सर्जित होते हैं।RxJS specificUntilChanged - ऑब्जेक्ट कंपर्सन

मेरे कोड:

export class SettingsPage { 
    static get parameters() { 
     return [[NavController], [UserProvider]]; 
    } 

    constructor(nav, user) { 
     this.nav = nav; 
     this._user = user; 

     this.typeChangeStream = new Subject(); 
     this.notifications = {}; 
    } 

    ngOnInit() { 

     this.typeChangeStream 
      .map(x => {console.log('value on way to distinct', x); return x;}) 
      .distinctUntilChanged(x => JSON.stringify(x)) 
      .subscribe(settings => { 
       console.log('typeChangeStream', settings); 
       this._user.setNotificationSettings(settings); 
      }); 
    } 

    toggleType() { 
     this.typeChangeStream.next({ 
      "sound": true, 
      "vibrate": false, 
      "badge": false, 
      "types": { 
       "newDeals": true, 
       "nearDeals": true, 
       "tematicDeals": false, 
       "infoWarnings": false, 
       "expireDeals": true 
      } 
     }); 
    } 

    emitDifferent() { 
     this.typeChangeStream.next({ 
      "sound": false, 
      "vibrate": false, 
      "badge": false, 
      "types": { 
       "newDeals": false, 
       "nearDeals": false, 
       "tematicDeals": false, 
       "infoWarnings": false, 
       "expireDeals": false 
      } 
     }); 
    } 
} 
+0

'टाइप चेंजस्ट्रीम' एक अवलोकन योग्य है? यह बताए बिना क्या गलत है कि कोड कौन सा कोड बना रहा है/आदि –

+0

कृपया 'यह काम नहीं करता' प्रश्नों से निपटने के लिए दिशानिर्देशों के लिए http://stackoverflow.com/help/mcve पर एक नज़र डालें। असल में एक न्यूनतम सत्यापन योग्य उदाहरण पोस्ट करें जो त्रुटि को पुन: उत्पन्न करता है, और अपेक्षित व्यवहार पोस्ट करता है और यह वर्तमान व्यवहार से अलग कैसे है। जेएसओएन स्ट्रिंग के बारे में बात करें, आपको यह जानने की जरूरत है कि यह वस्तुओं की समानता की जांच के लिए बुलेट प्रूफ विधि नहीं है। {"ए": 2, "बी": 1} उदाहरण के लिए {"बी": 1, "ए": 2} से अलग है, जबकि ये वही ऑब्जेक्ट्स – user3743222

+0

इसके लिए खेद है, मैंने और कोड जोड़ा। मुझे बुलेट प्रूफ ऑब्जेक्ट समानता जांच की आवश्यकता नहीं है, मुझे यकीन है कि इस मामले में ऑब्जेक्ट हर बार एक ही ऑर्डर होगा। –

उत्तर

15

मैं अंत में यह पता लगाने की जहां समस्या है। समस्या Vx में RxJS के संस्करण में थी और पहले V5 से भिन्न पैरामीटर ऑर्डर है।

RxJS 4:

distinctUntilChanged = समारोह (keyFn, comparer)

RxJS 5:

distinctUntilChanged = समारोह (comparer, keyFn)

कभी भी वाई डॉक्स आज, आप वी 4 पैरामीटर ऑर्डर पा सकते हैं, इससे सावधान रहें!

+0

अच्छा होगा यदि आप यहां अपना निश्चित कोड डालते हैं, – Milad

0

मैं एक ही समस्या थी, और वस्तुओं की तुलना करने के JSON.stringify उपयोग करने के साथ यह तय हो:

.distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b))

गंदा लेकिन काम कर कोड।

संबंधित मुद्दे