tl; डॉ: असल में मैं एंगुलर के ngOnDestroy
से Rxjs takeUntil()
ऑपरेटर के साथ शादी करना चाहता हूं। -- क्या यह संभव है?आरएक्सजेएस: टेकयूनीट() कोणीय घटक का ngOnDestroy()
मेरे पास एक कोणीय घटक है जो कई Rxjs सदस्यता खोलता है। घटक नष्ट होने पर इन्हें बंद करने की आवश्यकता है।
इस के लिए एक सरल समाधान होगा:
class myComponent {
private subscriptionA;
private subscriptionB;
private subscriptionC;
constructor(
private serviceA: ServiceA,
private serviceB: ServiceB,
private serviceC: ServiceC) {}
ngOnInit() {
this.subscriptionA = this.serviceA.subscribe(...);
this.subscriptionB = this.serviceB.subscribe(...);
this.subscriptionC = this.serviceC.subscribe(...);
}
ngOnDestroy() {
this.subscriptionA.unsubscribe();
this.subscriptionB.unsubscribe();
this.subscriptionC.unsubscribe();
}
}
यह काम करता है, लेकिन यह थोड़ा निरर्थक है। मुझे विशेष रूप से यह पसंद नहीं है कि - unsubscribe()
कहीं और है, इसलिए आपको याद रखना होगा कि ये जुड़े हुए हैं। - घटक राज्य सदस्यता के साथ प्रदूषित है।
मैं बहुत takeUntil()
ऑपरेटर या कुछ इसी तरह का उपयोग कर पसंद करते हैं, यह इस तरह दिखेगा बनाने के लिए होगा:
class myComponent {
constructor(
private serviceA: ServiceA,
private serviceB: ServiceB,
private serviceC: ServiceC) {}
ngOnInit() {
const destroy = Observable.fromEvent(???).first();
this.subscriptionA = this.serviceA.subscribe(...).takeUntil(destroy);
this.subscriptionB = this.serviceB.subscribe(...).takeUntil(destroy);
this.subscriptionC = this.serviceC.subscribe(...).takeUntil(destroy);
}
}
वहाँ है एक को नष्ट घटना या कुछ इसी तरह है कि मुझे takeUntil()
का उपयोग करते हैं या किसी अन्य तरीके से सरल करने के लिए उस तरह के घटक वास्तुकला? मुझे एहसास है कि मैं खुद को कन्स्ट्रक्टर या कुछ ऐसा कर सकता हूं जो ngOnDestroy()
के भीतर ट्रिगर हो जाता है लेकिन अंत में चीजों को पढ़ने के लिए इतना आसान नहीं होगा।
एक तरह से यह वही नहीं था जो मैं चाहता था - मैं घटक में एक अतिरिक्त राज्य आर्टिफैक्ट बनाने से बचाना चाहता था ('$ नष्ट ') और इसे' ngOnDestroy' से ट्रिगर करना। लेकिन मुझे यह देखने के बाद पता चला है कि इस के आसपास जाने के लिए कोई वाक्य रचनात्मक चीनी नहीं है। सभी सदस्यता को संग्रहीत करने के बावजूद यह निश्चित रूप से पहले से ही एक अच्छा समाधान है। धन्यवाद! – JeffreyHammansson
कोणीय टीम में चर्चा हुई है कि एक घटक में आरएक्सजे के लिए आसानी से सुलभ घटना को कैसे पहुंचाया जा सकता है, लेकिन जहां तक मैं kmow कुछ भी लागू नहीं किया गया है। – olsn
मैं यहां 'नया रीप्लेसब्जेक्ट (1)' पर विचार करूंगा। इस तरह आपका घटक नष्ट राज्य में रहेगा और आप सुनिश्चित हैं कि सबकुछ पूरा हो गया है। इसके अलावा, अच्छा जवाब :) – Dorus