AngularJS: কীভাবে ইউআরএলে ক্যোয়ারী প্যারামিটারগুলি সাফ করবেন?


135

আমার অ্যাঙ্গুলারজেএস অ্যাপ্লিকেশনটির ব্যবহারকারীর লিঙ্কডইন প্রোফাইলে অ্যাক্সেস থাকা দরকার। এটি করার জন্য আমাকে লিঙ্কডইন ইউআরএলটিতে ব্যবহারকারীকে পুনঃনির্দেশ করা দরকার যা একটি কলব্যাক redirect_uri প্যারামিটার ধারণ করে যা লিঙ্কডইনকে আমার ওয়েব অ্যাপে পুনঃনির্দেশ করতে এবং ইউআরএলে একটি "কোড" ক্যোয়ারী পরম অন্তর্ভুক্ত করতে বলবে। এটি একটি traditionalতিহ্যবাহী Oauth 2.0 প্রবাহ।

লিঙ্কডইন ব্যতীত নিম্নলিখিত ইউআরএলটিকে ব্যবহারকারীকে পুনঃনির্দেশিত করে ব্যতীত সবকিছু দুর্দান্ত কাজ করে:

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

?code=XXX&state=YYYএটিকে পরিষ্কার করার জন্য আমি URL থেকে সরিয়ে ফেলতে চাই । লিঙ্কডইন পুনর্নির্দেশ থেকে প্রাপ্ত ক্যোয়ারী প্যারামিটারগুলি ব্যবহারকারীর দেখার দরকার নেই।

আমি চেষ্টা করেছি $location.absUrl($location.path() + $location.hash()).replace(), তবে এটি ইউআরএলটিতে ক্যোয়ারী প্যারামগুলি রাখে।

আমি কোয়েরি প্যারামিটারগুলি, যেমন "কোড" ব্যবহার করেও বের করতে পারছি না ($location.search()).code। মনে হচ্ছে? উপরের ইউআরএলটিতে # এর আগে কৌণিকটিকে ট্রিক করা হচ্ছে।

উত্তর:


151

আমি ব্যবহার করি

$location.search('key', null)

যেহেতু এটি কেবল আমার চাবি মুছে দেয় না তবে এটি URL- এ দৃশ্যমানতা থেকে সরিয়ে দেয়।


2
এটি ক্রমটিতে ব্যাক বোতাম লুপের কারণ হিসাবে পিছনের বোতামটি //example.com?key=value এ ফিরে আসে, তবে কৌণিক ফরোয়ার্ডটি //example.com এ যায়। পরামর্শ?
জায়েব্রো

2
এটি আমার কাছে কিছুটা কোড ইস্যুর মতো শোনায়। কৌণিক কিছু ফরোয়ার্ড করা উচিত নয়, যদি না আপনার দ্বারা পদ্ধতির কোনও রাজা যুক্ত হয়। এছাড়াও, .replace () যোগ করা বর্তমান ইতিহাসের এন্ট্রি প্রতিস্থাপন করে।
জুলিয়াস

viewModelHelper.navigateTo ( 'foo বিন্যাস /'); foo url এ ক্যোয়ারী স্ট্রিংটি ধরে রাখছিল, তাই আমি এটি উইন্ডো.লোকেশন.href = 'foo /' ব্যবহার করে ঠিক করেছি; পরিবর্তে.
জায়েব্রো

2
উইন্ডো ব্যবহার করবেন না, পরিবর্তে কৌণিকের $ উইন্ডোটি ব্যবহার করুন। ইউনিট পরীক্ষা করা সহজ হবে। আরও: docs.angularjs.org/api/ng/service/$window
জুলিয়াস

ধন্যবাদ, যদি আপনি কোনও স্পেসিফিক প্যারাম মুছে ফেলতে চান তবে এই অ্যাওয়ার্সটি সঠিকভাবে কাজ করে।
ডেক্সিক্সো

107

আমি AngularJS ফোরাম থেকে উত্তর পেয়ে শেষ। বিশদ জন্য এই থ্রেড দেখুন


লিঙ্কটি একটি গুগল গ্রুপ থ্রেডের, যা পড়া কঠিন এবং একটি পরিষ্কার উত্তর সরবরাহ করে না। ইউআরএল প্যারামিটার ব্যবহার অপসারণ করতে

$location.url($location.path());

আমি মনে করি আপনি পথটি $ লোকেশন.পথের পরিবর্তে $ লোকেশন.আরল () এ রেখেছিলেন। উপরের মতো উভয়কে মার্জ করার চেষ্টা করা আমার পক্ষে কাজ করে না।
এমবিদেব

1
আমার জন্য কাজ করে না। উভয় ফাংশন ক্যোয়ারী পরমকে সেখানে রেখে দেয়।
পাবলো ইজাকুয়েল লিওন

সহায়ক উত্তর। আমার দৃশ্যে, প্রত্যেকবার প্রথমবারের পরে আমি $ লোকেশন.পাথ ('/ রিপোর্টমিন্ট') ট্রিগার করেছিলাম search
বব.মাজজো

এটি ক্রমটিতে ব্যাক বোতাম লুপের কারণ হিসাবে পিছনের বোতামটি //example.com?key=value এ ফিরে আসে, তবে কৌণিক ফরোয়ার্ডটি //example.com এ যায়। পরামর্শ?
জায়েব্রো

+1 এর জন্যThe link is to a Google Groups thread, which is difficult to read and doesn't provide a clear answer
ভ্লাদ

70

সমস্ত ক্যোয়ারী প্যারামিটারগুলি সরাতে , করুন:

$location.search({});

একটি নির্দিষ্ট ক্যোয়ারী প্যারামিটার অপসারণ করতে , করুন:

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

2
পাশাপাশি কৌণিক 1.5 জন্য কাজ করে।
মণীশ এম ডেমব্লানি

1
এছাড়াও সাথে কাজ করে undefined, যদি আপনি ব্যবহার এড়ানো করছি nullআমি নই।
হ্যাঙ্কস্কর্পিও

আমি যা পছন্দ করি না তা হ'ল আপনি যদি ব্রাউজারের ব্যাক বোতামটি দিয়ে ফিরে যান তবে আপনি আমার অনুসন্ধান পৃষ্ঠাগুলি আমার আগের অনুসন্ধান পৃষ্ঠায় ঠিক আগে করেছি।
জিনো

@ জিনো একটি কাজের আশেপাশে, আপনি এই রিসেটের আগে ব্রাউজারের ইতিহাসে একটি রেকর্ড যুক্ত করতে পারেন। stackoverflow.com/q/10541388/586051
রাহুল দেশাই

@ রাহুলডেসাই আমি এনজি-রুটটি ব্যবহার করছি, আমার পক্ষে শক্ত এটি স্বয়ংক্রিয়ভাবে হয়ে যাবে
জিনো

29

কোনও আইটেম সাফ করার জন্য এটি মুছুন এবং কল করুন $$ রচনা

    if ($location.$$search.yourKey) {
        delete $location.$$search.yourKey;
        $location.$$compose();
    }

কৌণিকুল উত্স থেকে প্রাপ্ত: https://github.com/angular/angular.js/blob/c77b2bcca36cf199478b8fb651972a1f650f646b/src/ng/location.js#L419-L443


2
উজ্জ্বল! কবজির মতো কাজ করেছেন।
পলকিপডারসন

এটি আমার পক্ষে কাজ করেছিল তবে আমি ধরে নিয়েছি জুলিয়াসের সমাধানটি আরও সঠিক, কারণ searchপদ্ধতিটি তৈরি করার সময় কৌণিক ছেলেরা মনে মনে রেখেছিল বলে মনে হয় । docs.angularjs.org/api/ng/service/$location#search
zmilojko

1
ধন্যবাদ, এটি বেশ ভালভাবে কাজ করেছে ... মজার বিষয় হল, আইই 8 টি সেই ইউআরএল সেট / রচনা করতে এবং পরে এটি লোড করতে পছন্দ করে। আমি নিশ্চিত যে এ কারণেই যথাযথ রুটিংকেই প্রাধান্য দেওয়া হয় এবং আমরা কেন খারাপ লোক। : পি
রোমানুলাস

27

আপনি ব্যবহার করে একটি নির্দিষ্ট ক্যোয়ারী প্যারামিটার মুছতে পারেন:

delete $location.$$search.nameOfParameter;

অথবা আপনি খালি বস্তুতে অনুসন্ধান সেট করে সমস্ত ক্যোয়ারী প্যারাম সাফ করতে পারেন:

$location.$$search = {};

2
কেন জানি না, তবে পৃষ্ঠাগুলি স্যুইচ করার সময় এই সমাধানটি ভালভাবে কাজ করে না (প্যারামিটারগুলি পুনরায় প্রদর্শিত হতে পারে, এমনকি $location.$$search = {}কার্যকর করা হলেও )। @ বাসারত দ্রবণ ভালভাবে কাজ করছে।
মিক 378

1
আমার জন্য ভাল কাজ করেছে - আপনি যে অনুক্রমটি প্যারামিটারটি সরিয়ে করছেন এবং পথটি পরিবর্তন করছেন তা পরীক্ষা করে দেখুন?
দেমানিয়াক

1
যদিও এটি কাজ করতে পারে এটি প্রাইভেট ভেরিয়েবলগুলি অ্যাক্সেস করে যা পরিবর্তন করা উচিত নয়, দেখুন অন্য একটি সমাধানের জন্য জুলিয়াসের উত্তর দেখুন
বেন টালিডিয়োরোস

26

লেখার সময় এবং যেমন আগে @ বস দ্বারা উল্লিখিত হয়েছে, html5mode হতে হবে true, যাতে সেট পাবে$location.search() হতে হবে এবং এটি উইন্ডোটির ভিজ্যুয়াল ইউআরএলে ফিরে প্রতিবিম্বিত হতে পারে।

Https://github.com/angular/angular.js/issues/1521 দেখুনআরও তথ্যের জন্য ।

তবে যদি html5mode হয়true আপনি সহজেই এর মাধ্যমে URL এর ক্যোয়ারী স্ট্রিংটি সাফ করতে পারেন:

$location.search('');

অথবা

$location.search({});

এটি উইন্ডোটির ভিজ্যুয়াল ইউআরএলকেও পরিবর্তন করবে।

(এর 1.3.0-rc.1সাথে AngularJS সংস্করণে পরীক্ষিত html5Mode(true)))


12

এটি যখন কাজ করা প্রয়োজন তখন html5mode=false ?

অন্যান্য উত্তরের সকল শুধুমাত্র কাজ যখন কৌণিক এর html5modeহয় true। যদি আপনি বাইরে কাজ করছেন html5mode, তবে $locationকেবলমাত্র "জাল" অবস্থানটিকে উল্লেখ করুন যা আপনার হ্যাশে থাকে - এবং তাই$location.search প্রকৃত পৃষ্ঠার অনুসন্ধানের প্যারামগুলি দেখতে / সম্পাদনা / ঠিক করতে পারে না।

কৌণিক লোডগুলির আগে পৃষ্ঠার এইচটিএমএলতে সন্নিবেশ করানোর জন্য এখানে একটি কার্যকার্য রয়েছে :

<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>

2
আমি এইচটিএমএল 5 মডে সত্যকে কনফিগার করা এড়াতে অন্য উপায় হ'ল ক্যোরির স্ট্রিং তৈরি করে এটিতে # ডান আগে থাকা ? । এর myapp/#?client=clientName পরিবর্তে myapp/?client=clientName
এঞ্জেল গাও

5

শুধু ব্যবহার

$location.url();

পরিবর্তে

$location.path();

4

আপনি যদি অন্য কোনও URL- এ যেতে চান এবং ক্যোয়ারীর প্যারামিটারগুলি কেবলমাত্র ব্যবহার করুন:

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

1

আপনি যদি রুটের পরামিতিগুলি ব্যবহার করছেন তবে কেবল $ রুটপ্যারামগুলি পরিষ্কার করুন

$routeParams= null;

1
এই মাত্র স্থানীয় পরিবর্তনশীল সেট হবে $routeParamsথেকে null। অ্যাড্রেস বারে আসলে ইউআরএল প্যারামিটারগুলিকে কোনওভাবেই প্রভাবিত করবে না।
এরিক এফ।

1

কীভাবে কেবল অবস্থানের হ্যাশটি বাতিল করতে হবে

$location.hash(null);

0

আপনি যদি অবিলম্বে প্যারামিটারগুলি প্রক্রিয়া করেন এবং তারপরে পরবর্তী পৃষ্ঠায় যান তবে আপনি নতুন অবস্থানের শেষে একটি প্রশ্ন চিহ্ন রাখতে পারেন।

উদাহরণস্বরূপ, আপনি যদি $ লোকেশন.পথ ('/ পরের পৃষ্ঠা') করতেন;

আপনি পরিবর্তে এটি করতে পারেন:। অবস্থান.path ('/ nextPage?');


0

আমি উপরের উত্তরগুলি চেষ্টা করেছি কিন্তু সেগুলি কাজে লাগাতে পারছি না। আমার পক্ষে কাজ করা একমাত্র কোড ছিল$window.location.search = ''



0

গৃহীত উত্তরটি আমার পক্ষে কাজ করেছে, তবে পিছনের বোতামটি দিয়ে সমস্যাগুলি সমাধান করতে আমার আরও গভীর গভীরতা তৈরি করতে হবে।

আমি যেটা লক্ষ্য করেছি তা হ'ল যদি আমি ব্যবহার করে কোনও পৃষ্ঠায় লিঙ্ক করি <a ui-sref="page({x: 1})">তবে কোয়েরি স্ট্রিংটি ব্যবহার করে সরিয়ে দিন$location.search('x', null) , আমি আমার ব্রাউজারের ইতিহাসে কোনও অতিরিক্ত এন্ট্রি পাই না, সুতরাং পিছনের বোতামটি যেখানে আমি শুরু করেছি সেখানে আমাকে ফিরিয়ে নিয়ে যায়। যদিও আমি এটি ভুল বলে মনে করি কারণ আমার মনে হয় না যে কৌনিকটি আমার জন্য স্বয়ংক্রিয়ভাবে এই ইতিহাসের এন্ট্রিটি সরিয়ে ফেলবে, এটি আসলে আমার নির্দিষ্ট ব্যবহারের ক্ষেত্রে পছন্দসই আচরণ।

সমস্যা যে যদি আমি ব্যবহার করে পৃষ্ঠাটি লিংক <a href="https://stackoverflow.com/page/?x=1">পরিবর্তে, তারপর একই ভাবে কোয়েরি স্ট্রিং অপসারণ, আমি কি করতে আমার ব্রাউজারের ইতিহাসে একটি অতিরিক্ত এন্ট্রি পেতে, তাই আমি ফিরে বাটন ক্লিক করুন আছে দুইবার আমি কোথায় শুরু অবস্থায় ফিরিয়ে আনতে । এটি অসঙ্গত আচরণ, তবে বাস্তবে এটি আরও সঠিক বলে মনে হয়।

আমি সহজেই hrefব্যবহার করে লিঙ্কগুলির সাথে সমস্যাটি সমাধান করতে পারি $location.search('x', null).replace(), তবে তারপরে আপনি কোনও ui-srefলিঙ্কের মাধ্যমে ল্যান্ড করার সময় পৃষ্ঠাটি ভেঙে যায় , সুতরাং এটি কোনও ভাল নয়।

চারপাশে প্রচুর ঝাঁকুনির পরে, এটিই আমি ঠিক করে এলাম:

আমার অ্যাপ্লিকেশনটির runকার্যক্রমে আমি এটি যুক্ত করেছি:

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

তারপরে আমি এই কোডটি ক্যোরিয় স্ট্রিং প্যারামিটারটি সরাতে ব্যবহার করি:

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

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

0

জন্য কৌণিক> 2 , আপনি প্যারাম আপনি সাফ করার বিষয়ে সব থেকে নাল পাস করতে পারেন

this.router.navigate(['/yourRoute'], {queryParams:{params1: null, param2: null}})
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.