javascript - Changing route in Angular causes re-evaluation of functions on the previous route's controller -
मेरे पास एक मार्ग मिला है (जैसे / items ) और उसके नियंत्रक
$ scope.pathForItem = फ़ंक्शन (आइटम) {...} विधि, जो एक सूची में प्रत्येक आइटम के लिए पथ प्रदर्शित करने के लिए टेम्पलेट में उपयोग किया जाता है जब मैं इस पृष्ठ पर हूं और मार्ग बदलने के लिए किसी भी लिंक पर क्लिक करता हूं, कोनेर कॉल $ rootScope। $ लागू () कहीं उसके कोड में है और इसके कारण कुछ फ़ंक्शंस का पुनः मूल्यांकन हो सकता है < कोड> $ गुंजाइश । समस्या यह है कि यह पिछले मार्ग के नियंत्रक के दायरे पर कार्य का फिर से मूल्यांकन करता है, इस प्रकार पृष्ठ पर प्रत्येक आइटम के लिए pathForItem एक बार फिर फोन करता है। आम तौर पर यह एक बड़ा मुद्दा नहीं है - यह अनावश्यक है, लेकिन किसी भी त्रुटि का कारण नहीं है।
हालांकि, जब मैं साइन आउट करने का प्रयास करता हूं तो त्रुटियों का कारण बनता है। pathForItem मानता है कि उपयोगकर्ता ऑब्जेक्ट मौजूद है (जो इसे authService से मिलता है) और यह आम तौर पर काम करता है, क्योंकि हम यह सुनिश्चित करते हैं कि उपयोगकर्ता इस रूट के समाधान फ़ंक्शन अब, जब कोई साइन आउट करने की कोशिश करता है, तो कोनेर कॉल $ rootScope। $ लागू होते हैं () और फिर से सभी मदों के लिए pathForItem कॉल करने का प्रयास करता है हालांकि, बीच में कहीं, उपयोगकर्ता को अंततः हटा दिया जाता है, authService.currentUser () null लौटने शुरू होता है और pathForItem को कॉल करने के लिए आगे बढ़ता है त्रुटि ...
क्या यह वास्तव में ऐसा काम करना चाहिए? कोनेरी का मैं एनजीआरयूटीई के साथ कोनेर 1.3.10 का उपयोग कर रहा हूं। आपके मामले में अपराधी html5 मोड है। एक वैश्विक ईवेंट हैंडलर है जो लिंक और कॉल को फिर से लिखता है जब html5Mode सक्षम है , संबंधित लिंक के लिए url rewriting सक्षम / अक्षम करता है वैसे भी, आप इस व्यवहार को एक कॉन्फ़िग ब्लॉक में बंद कर सकते हैं: अधिक जानकारी के लिए देखें। यदि आपको इस व्यवहार की आवश्यकता है तो आप या तो अपनी स्थिति के लिए अपना फ़ंक्शन तैयार कर सकते हैं या $ रूटस्स्कोप। $ लागू हो सकता है पिछले मार्ग के नियंत्रक के लिए कॉल फ़ंक्शन भी? क्या कोई सामान्य कार्यवाही है या क्या मुझे यह सुनिश्चित करना है कि सभी नियंत्रकों में सभी फ़ंक्शंस जिन्हें टेम्प्लेट में भी उपयोग किया जाता है, हमेशा जांचें कि वे जो ऑब्जेक्ट का उपयोग करते हैं, वास्तव में वहां हैं, भले ही मैंने इसे पहले ही resolve < / कोड> फ़ंक्शन? $ apply समस्या यह है कि html5 मोड सक्षम नहीं है, भले ही यह किया गया हो। मैं इसे एक बग मानता हूं क्योंकि डॉक्स कहते हैं
$ locationProvider.html5Mode ({rewriteLinks: false}); $ scope.pathForItem एक मान बना सकते हैं। मैं किसी भी तरह से बाद की सलाह देता हूं।
Comments
Post a Comment