meaning - angularjs tutorial pdf




AngularJS: यूआरएल में क्वेरी पैरामीटर कैसे साफ़ करें? (10)

html5mode = false जब इसे काम करने की आवश्यकता है?

अन्य सभी उत्तर केवल तभी काम करते हैं जब कोणीय का html5mode true होता true । यदि आप html5mode बाहर काम कर रहे हैं, तो $location केवल "नकली" स्थान को संदर्भित करता है जो आपके हैश में रहता है - और इसलिए $location.search वास्तविक पृष्ठ के खोज पैरा को देख / संपादित / ठीक नहीं कर सकता है।

कोणीय भार से पहले पृष्ठ के HTML में डालने के लिए यहां एक वर्कअराउंड है:

<script>
  if (window.location.search.match("code=")){
    var newHash = "/after-auth" + window.location.search;
    if (window.history.replaceState){
      window.history.replaceState( {}, "", window.location.toString().replace(window.location.search, ""));
    }
    window.location.hash = newHash;
  }
</script>

मेरे AngularJS एप्लिकेशन को उपयोगकर्ता की LinkedIn प्रोफ़ाइल तक पहुंच की आवश्यकता है। ऐसा करने के लिए मुझे उपयोगकर्ता को एक लिंक्डइन यूआरएल पर रीडायरेक्ट करने की जरूरत है जिसमें कॉलबैक रीडायरेक्ट_री पैरामीटर शामिल है जो उपयोगकर्ता को मेरे वेबैप पर रीडायरेक्ट करने के लिए लिंकडइन को बताएगा और यूआरएल में "कोड" क्वेरी पैरामेट शामिल करेगा। यह एक पारंपरिक ओथ 2.0 प्रवाह है।

सबकुछ बढ़िया काम करता है सिवाय इसके कि लिंकडइन उपयोगकर्ता को निम्नलिखित यूआरएल पर रीडायरेक्ट करता है:

http://localhost:8080/?code=XXX&state=YYY#/users/123/providers/LinkedIn/social-sites

मैं इसे साफ करने के लिए यूआरएल से ?code=XXX&state=YYY को हटाना चाहता हूं। उपयोगकर्ता को LinkedIn रीडायरेक्ट से प्राप्त क्वेरी पैरामीटर देखने की आवश्यकता नहीं है।

मैंने $location.absUrl($location.path() + $location.hash()).replace() , लेकिन यह URL में क्वेरी पैराम रखता है।

मैं क्वेरी पैरामीटर निकालने में भी असमर्थ हूं, उदाहरण के लिए ($location.search()).code का उपयोग करके "कोड"। ऐसा लगता है? ऊपर यूआरएल में # से पहले कोणीय छल रहा है।


आप इसका उपयोग करके एक विशिष्ट क्वेरी पैरामीटर को हटा सकते हैं:

delete $location.$$search.nameOfParameter;

या आप खाली ऑब्जेक्ट पर खोज सेट करके सभी क्वेरी पैराम साफ़ कर सकते हैं:

$location.$$search = {};

बस हैश को शून्य पर सेट करने के बारे में कैसे

$location.hash(null);

महज प्रयोग करें

$location.url();

के बजाय

$location.path();

मैं इस क्वेरी के साथ सभी क्वेरी पैरामीटर को प्रतिस्थापित कर सकता हूं: $location.search({});
समझने में आसान और उन्हें साफ़ करने का आसान तरीका।


मैं उपयोग करता हूं

$location.search('key', null)

चूंकि यह न केवल मेरी कुंजी को हटा देता है बल्कि इसे यूआरएल पर दृश्यता से हटा देता है।


यदि आप किसी अन्य यूआरएल पर जाना चाहते हैं और क्वेरी पैरामीटर को साफ़ करना चाहते हैं तो बस इसका इस्तेमाल करें:

$location.path('/my/path').search({});

यदि आप तुरंत पैरामीटर को संसाधित करते हैं और फिर अगले पृष्ठ पर जाते हैं, तो आप नए स्थान के अंत में एक प्रश्न चिह्न डाल सकते हैं।

उदाहरण के लिए, यदि आपने $ location.path ('/ nextPage') किया होगा;

आप इसके बजाय ऐसा कर सकते हैं: $ location.path ('/ nextPage?');


लिखने के समय, और जैसा कि पहले @ बॉश द्वारा उल्लेख किया गया था, html5mode $location.search() सेट करने में सक्षम होने के लिए true होना चाहिए और इसे विंडो के दृश्य URL में वापस प्रतिबिंबित किया जाना चाहिए।

अधिक जानकारी के लिए https://github.com/angular/angular.js/issues/1521 देखें।

लेकिन अगर html5mode true तो आप यूआरएल की क्वेरी स्ट्रिंग को आसानी से साफ़ कर सकते हैं:

$location.search('');

या

$location.search({});

यह विंडो के दृश्य यूआरएल को भी बदल देगा।

( html5Mode(true) साथ AngularJS संस्करण 1.3.0-rc.1 में परीक्षण किया गया।)


स्वीकार्य उत्तर मेरे लिए काम करता था, लेकिन मुझे बैक बटन के साथ समस्याओं को ठीक करने के लिए थोड़ा गहरा खोदना पड़ता था।

मैंने जो देखा वह यह है कि यदि मैं <a ui-sref="page({x: 1})"> का उपयोग कर किसी पृष्ठ से लिंक <a ui-sref="page({x: 1})"> , तो $location.search('x', null) का उपयोग करके क्वेरी स्ट्रिंग को हटा दें, मैं नहीं करता मेरे ब्राउज़र इतिहास में एक अतिरिक्त प्रविष्टि नहीं है, इसलिए बैक बटन मुझे वापस ले जाता है जहां मैंने शुरू किया था। हालांकि मुझे लगता है कि यह गलत है क्योंकि मुझे नहीं लगता कि कोणीय को मेरे लिए इस इतिहास प्रविष्टि को स्वचालित रूप से हटा देना चाहिए, यह वास्तव में मेरे विशेष उपयोग-मामले के लिए वांछित व्यवहार है।

समस्या यह है कि यदि मैं इसके बजाय <a href="/page/?x=1"> का उपयोग कर पृष्ठ से लिंक करता हूं, तो क्वेरी स्ट्रिंग को उसी तरह से हटा दें, मुझे अपने ब्राउज़र इतिहास में अतिरिक्त प्रविष्टि मिलती है, इसलिए मैं जहां मैंने शुरू किया था, वहां वापस जाने के लिए दो बार बैक बटन क्लिक करना होगा। यह असंगत व्यवहार है, लेकिन वास्तव में यह और अधिक सही लगता है।

मैं आसानी से $location.search('x', null).replace() का उपयोग करके href लिंक के साथ समस्या को ठीक कर सकता हूं, लेकिन फिर जब आप ui-sref लिंक के माध्यम से उस पर $location.search('x', null).replace() तो यह पृष्ठ तोड़ता है, इसलिए यह कोई अच्छा नहीं है ।

बहुत सारे झुकाव के बाद, यह ठीक है जिसके साथ मैं आया था:

मेरे ऐप के run फ़ंक्शन में मैंने यह जोड़ा:

$rootScope.$on('$locationChangeSuccess', function () {
    $rootScope.locationPath = $location.path();
});

फिर मैं क्वेरी स्ट्रिंग पैरामीटर को हटाने के लिए इस कोड का उपयोग करता हूं:

$location.search('x', null);

if ($location.path() === $rootScope.locationPath) {
    $location.replace();
}




angularjs