2013-03-18 22 views
6

मैं उपयोग कर रहा हूँ कोणीय के scrollTo और anchorScroll इस तरह:फिर से लोड करने कोणीय को रोकने के लिए कैसे जब पता बदलता है

app.controller('TestCtrl', function($scope, $location, $anchorScroll) { 
    $scope.scrollTo = function(id) { 
     $location.hash(id); 
     $anchorScroll(); 
    } 
}); 

<a ng-click="scrollTo('foo')">Foo</a> 

<div id="foo">Here you are</div> 

मेरे समस्या यह है कि जब मैं लिंक पर क्लिक करें पृष्ठ को स्क्रॉल डाउन, लेकिन मामलों के 50% में पेज रीलोड्स क्योंकि यूआरएल में हैश बदलता है।

मैं कोणीय को पृष्ठ को पुनः लोड करने से कैसे रोक सकता हूं?

अद्यतन: मैं पाया है यहाँ

कि

https://groups.google.com/forum/?fromgroups=#!msg/angular/BY2ekZLbnIM/MORF-z2vHnIJ

कि

The $location service broadcasts a $locationChangeStart event. You can observe that and call event.preventDefault() to stop the navigation. Nice!

किसी को भी उस घटना का निरीक्षण करने के लिए कैसे और रोकने डिफ़ॉल्ट

उत्तर

1

बता सकता है कि घटना उत्सर्जित होता है रूटस्कोप पर, ताकि आप 01 का उपयोग करके पर्यवेक्षक को पंजीकृत कर सकेंविधि।

$scope.$on('$locationChangeStart', function(ev) { 
    ev.preventDefault(); 
}); 
+0

मुझे लगता है कि scrollTo समारोह में डाल दिया है और यह काम करता है, लेकिन समस्या तो मेरे दूसरे क्लिक करें बाईं ओर मेनू मेनू काम करना बंद कर देता है क्योंकि वह हैश को भी परेशान कर रहा है। मैं केवल तब ही रोक सकता हूं जब कणिका लिंक पर क्लिक करें केवल – user1865341

+0

मुझे यकीन नहीं है कि आप कर सकते हैं या नहीं। आपको शायद उन लिंक को '$ एंकर स्क्रॉल()' के साथ प्रबंधित करना होगा या साथ ही अपने डिज़ाइन पर पुनर्विचार करना होगा। वैसे, वह स्निपेट आपके कंट्रोलर फ़ंक्शन में जाता है जो आपके 'स्क्रॉल टू फ़ंक्शन' में नहीं होता है। – cezar

6

आप एनजी क्लिक हैंडलर पर $ घटना पैरामीटर जोड़ सकते हैं:

<a ng-click="scrollTo('foo', $event)">Foo</a> 

और scrollTo समारोह में आप आगे क्या कर सकते हैं:

scope.scrollTo = function(str, event) { 
    event.preventDefault(); 
    event.stopPropagation(); 

    /** SOME OTHER LOGIC */ 
} 

लेकिन वह यह है कि आप करना चाहिए मतलब है मैन्युअल रूप से "ए" तत्व से लक्ष्य एंकर हैश को पार्स करें।

9

रीफ्रेश हो रहा है क्योंकि स्थान चेंजस्टार्ट ईवेंट पर कॉल है। आप ऐसा करके इस रोक सकता:

scope.$on('$locationChangeStart', function(ev) { 
    ev.preventDefault(); 
}); 

मैं वास्तव में मेरे अपने scrollTo निर्देश इसके अंदर इस कॉल का उपयोग करता है लेखन समाप्त हो गया।

Plnkr/Github

My other post about this here

0

, एक कोणीय लंगर में पुन: लोड होने से रोक एक खाली href विशेषता को जोड़ने के लिए।

<a href ng-click="scrollTo('foo')">Foo</a> OR <a href="" ng-click="scrollTo('foo')">Foo</a> 

डॉक: https://docs.angularjs.org/api/ng/directive/ngHref

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

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