2013-02-15 11 views
14

आशा में routeChangeStart लिए काम नहीं कर किसी भी AngularJS गुरु मुझे this.Here साथ मदद कर सकते हैं, मेरे AngularJS कोडevent.preventDefault() AngularJS एप्लिकेशन

$scope.$on('$routeChangeStart', function(event, next, current) { 
       if ($scope.myForm.$dirty) { 
        if(!confirm("Unsaved, do u want to continue?")) { 
         event.preventDefault(); 
        } 
       } 
      }); 

यह ब्राउज़र वापस बटन क्लिक में अलर्ट जब डेटा गंदा है, लेकिन रद्द या ठीक क्लिक करने पर यह अभी भी रूट परिवर्तन को पूरा करता है। ऐसा लगता है कि event.preventDefault() काम नहीं कर रहा है। किसी भी एक का कहना है सकते हैं ($ प्रसारण पर देखें) तो आप बस ($routeChangeStart उस प्रकार के है) प्रकार के प्रसारण के एक घटना को रद्द नहीं सकते हैं कि क्या हो सकता है गलत

+0

शायद जाँच: http: // stackoverflow।कॉम/प्रश्न/14 9 00008/रोक-रीडायरेक्ट-व्यवहार-इन-एंजुलरजेस-ऐप –

+0

@ फ़्लेक लेकिन वह समाधान उपयोगकर्ता को पुष्टिकरण के लिए संकेत नहीं देगा बल्कि ब्राउज़ करने के लिए बटन को वापस करने की अनुमति नहीं देगा – iJade

+0

मैं एक ही समस्या में चल रहा हूं। मैंने $$ChangeStart और $ locationChangeStart दोनों की कोशिश की है, लेकिन उनमें से कोई भी काम नहीं किया है। क्या आपको इस समस्या का उपयुक्त समाधान मिला है? – Sam

उत्तर

3

AngularJS docs के अनुसार:

इवेंट लाइफ चक्र उस दायरे से शुरू होता है जिस पर $ प्रसारण कहा जाता था। इस स्कोप पर नाम ईवेंट सुनने वाले सभी श्रोताओं को अधिसूचित किया गया है। इसके बाद, यह कार्यक्रम वर्तमान दायरे के सभी प्रत्यक्ष और अप्रत्यक्ष स्कॉप्स तक फैलता है और के साथ सभी पंजीकृत श्रोताओं को कॉल करता है। घटना रद्द नहीं की जा सकती है।

+0

ठीक हो सकता है तो ब्राउजर बैक बटन का पता लगाने के अलावा किसी भी अन्य तरीके का उपयोग करने के अलावा अन्य क्लिक करें $ pathChangeStart.I पहले से ही स्थान चेंजस्टार्ट और ऑनबेरनलोड लोड करने की कोशिश की है, दोनों काम नहीं कर रहे हैं – iJade

+0

मैं पहले एक फ़ंक्शन को कॉल करता हूं जो सभी निर्भरताओं की जांच करता है और केवल तभी जब वे सत्य हैं तो आप स्थान बदलते हैं। आप जो वास्तव में करने की कोशिश कर रहे हैं उसके बारे में थोड़ा और विवरण अच्छा होगा। –

+0

वास्तव में मेरे पास एक फॉर्म है। अगर फॉर्म में सहेजा गया डेटा है और उपयोगकर्ता ब्राउजर बैक बटन पर क्लिक करता है तो यह एक पुष्टिकरण संदेश मांगता है। यही वह है जो मैं वास्तव में करने की कोशिश कर रहा हूं। यदि आप कुछ कोड पोस्ट कर सकते हैं तो यह पूरी तरह से मददगार होगा । – iJade

32

मैं इस एक को ढूंढने में कठिनाई के बहुत था, लेकिन "$ routeChangeStart" घटना के बजाय, आप जिसके लिए आप डिफ़ॉल्ट रोका जा सकता है, "$ locationChangeStart" घटना को सुन सकते हैं:

$scope.$on("$locationChangeStart", function(event, next, current) { 
    if (!confirm("You have unsaved changes, continue navigating to " + next + " ?")) { 
     event.preventDefault(); 
    } 
}); 

आप हमेशा डिफ़ॉल्ट को रोक सकते हैं, "अगला" स्टोर कर सकते हैं, और एक साफ जेएस मोडल प्रदर्शित कर सकते हैं और असीमित रूप से निर्णय ले सकते हैं।

$ locationChangeStart वर्तमान में undocumented लेकिन यहाँ संदर्भित है: https://github.com/angular/angular.js/issues/2109

+0

यह मेरे लिए काम करता है! – RolandoCC

+0

धन्यवाद, धन्यवाद, धन्यवाद! –

2

यह समस्या नवीनतम संस्करण (> = 1.3.8) में तय हुई थी।

के बाद से तर्क $ routeChangeStart को आपूर्ति की अधिक विस्तृत (और अक्सर अधिक उपयोगी), यदि संभव हो तो, अपने कोणीय संस्करण को अद्यतन करने की कोशिश कर रहे हैं ...

5

बिल्कुल कोणीय 1.3.7 https://code.angularjs.org/1.3.7/docs/api/ngRoute/service/ $ मार्ग

के बाद फिक्स्ड

$ रूट चेंजस्टार्ट मार्ग परिवर्तन से पहले प्रसारित किया गया। इस बिंदु पर मार्ग सेवाएं मार्ग परिवर्तन के लिए आवश्यक सभी निर्भरताओं को हल करना शुरू कर देती हैं। आम तौर पर इसमें दृश्य टेम्पलेट के साथ-साथ संकल्प मार्ग संपत्ति में परिभाषित किसी भी निर्भरता को शामिल करना शामिल है। एक बार सभी निर्भरताओं को $ रूट हल किया जाता हैChangeSuccess निकाल दिया जाता है।

मार्ग परिवर्तन (और $ स्थान परिवर्तन जो इसे ट्रिगर करता है) को ईवेंट की रोकथाम विधि को कॉल करके रोका जा सकता है। इवेंट ऑब्जेक्ट के बारे में अधिक जानकारी के लिए $ rootScope.Scope देखें।

0

यदि आप $stateProvider का उपयोग कर रहे हैं तो समस्या बनी रह सकती है। इस मामले उपयोग में:

$scope.$on('$stateChangeStart', function(event){ 
 
    ..... 
 
    event.preventDefault(); 
 
});