AngularJS $ অবস্থান ব্যবহার করে একটি url এ ক্যোয়ারী স্ট্রিং থেকে মানগুলি পাওয়া


95

। অবস্থান. search সম্পর্কিত , দস্তাবেজগুলি বলেছে,

কোনও প্যারামিটার ছাড়াই কল করা হলে বর্তমান url- এর অনুসন্ধান অংশটি (বস্তু হিসাবে) ফিরে আসুন।

আমার ইউআরএলে, আমার ক্যোয়ারী স্ট্রিংয়ের একটি মান ছাড়াই '? Test_user_bLzgB' রয়েছে para এছাড়াও '$ অবস্থান.search ()' একটি বস্তু প্রদান করে। আমি কীভাবে আসল পাঠ্য পেতে পারি?


আপনি কি অবজেক্ট পাবেন? আপনার মুখোমুখি কোনও সমস্যা বা সমস্যা আছে যা আপনার মুখোমুখি সমস্যাটি দেখায়? আপনি যখন ব্যবহার করবেন ঠিক তখনই আপনি ঠিক আছেন $location.search()তবে আমি কল করার সময় আপনি যে "অবজেক্ট" পেয়েছেন তা যাচাই করতে চাই ...
কলমেকাটোটি

আমি জানি না এটি কী বস্তু। আমি বৈশিষ্ট্যগুলি গণনা করার চেষ্টা করেছি কিন্তু সেখানে কোনও উপস্থিতি নেই।
ইয়ান ওয়ারবার্টন

কোনও ক্যুরি স্ট্রিং পরীক্ষা করে এমন একটি ফিডল কীভাবে করবেন তা নিশ্চিত নন।
আয়ান ওয়ারবার্টন

উত্তর:


152

গ্রহণযোগ্য উত্তর গৃহীত হওয়ার পরে এটি পরিবর্তন হয়েছে কিনা তা নিশ্চিত নয়, তবে এটি সম্ভব is

$location.search()কী-মান জোড়াগুলির একটি অবজেক্ট, ক্যোয়ারী স্ট্রিংয়ের মতো একই জোড়া প্রদান করবে। একটি কী যার কোনও মূল্য নেই কেবলমাত্র এটি সত্য হিসাবে অবজেক্টে সঞ্চিত রয়েছে। এই ক্ষেত্রে, অবজেক্টটি হ'ল:

{"test_user_bLzgB": true}

আপনি এই সাথে সরাসরি এই মান অ্যাক্সেস করতে পারে $location.search().test_user_bLzgB

উদাহরণ (বৃহত্তর ক্যোরিয় স্ট্রিং সহ): http://fiddle.jshell.net/TheSharpieOne/yHv2p/4/show/?test_user_bLzgB&somethingElse&also&something=Somethingelse

দ্রষ্টব্য: হ্যাশগুলির কারণে (এটি http://fiddle.jshell.net/#/url এ যাবে , যা একটি নতুন ফিজল তৈরি করবে), এই ফিডল ব্রাউজারগুলিতে কাজ করবে না যা জেএসের ইতিহাস সমর্থন করে না (কাজ করবে না) আইই <10) এ

সম্পাদনা করুন:
@ নরেশ এবং @ ডেভিডচেকপ্যাকের মন্তব্যে যেমন উল্লেখ করা হয়েছে, এগুলিও $locationProviderসঠিকভাবে কনফিগার করা দরকার: https://code.angularjs.org/1.2.23/docs/guide/$location#-location-service-configration


4
নরেশ যেমন উল্লেখ করেছেন, $locationProviderএছাড়াও সঠিকভাবে কনফিগার করা দরকার: কোড. angularjs.org/1.2.23/docs/guide/… (এটি আমাকে ছিটকে গেছে। আশা করি লিঙ্কটি কিছুটা সময় সাশ্রয় করে))
ডেভিড টেচপাক

4
অবস্থান সরবরাহকারীর কনফিগার করার জন্য আপনার দরকার: উইন্ডো.এপ.কনফিগ ['$ লোকেশনপ্রোভাডার', ($ লোকেশনপ্রোভাডার) -> $ লোকেশনপ্রাইভার। Html5 মোড সত্য) আপনার এইচটিএমএল ফাইলে আপনার একটি বেস ট্যাগও প্রয়োজন: <বেস href = "/">
আমিন আরিয়ানা

অনুপ্রেরণা এবং দরকারী টিপস জন্য ধন্যবাদ, শুধু আমার কেস ভাগ করুন। আমি একটি ধ্রুবক নামক ব্যবহারকারী কনফিগ তৈরি করি এবং সমস্ত কিছু ভিতরে রাখি, ব্যবহারকারীর নমনীয়তার জন্য কিছু সেটিংস ক্যোয়ারী স্ট্রিং দ্বারা ওভাররেড করা যায়। আমি এটি ব্যবহার করি এবং ক্যোয়ারীটিকে বিশ্বব্যাপী নিয়ন্ত্রণকারী স্কোপ ভেরিয়েবলে রাখি যা এইচটিএমএল ট্যাগে রয়েছে যাতে কোনও শিশু নিয়ামক পরিষেবা সহ প্যারামিটার নিতে পারে। কারণ ইউজার কনফিগও পরিষেবাতে রাখা হয়। সুতরাং কার্যত, তারা একত্র হয়ে কথা বলতে পারে।
সিমংগিসি

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

@ দ্য শার্পিওন এক মুহুর্ত থাকলে আপনি কি এই প্রশ্নটি একবার দেখে নিতে পারেন? stackoverflow.com/questions/43121888/…
লিওন গাবান

48

আপনার যদি কেবল কোয়েরি স্ট্রিংটিকে পাঠ্য হিসাবে দেখার প্রয়োজন হয় তবে আপনি এটি ব্যবহার করতে পারেন: $window.location.search


11
এটি কীভাবে উত্তর নয়? হয়তো এটা একটু ছোট, কিন্তু এটা করে প্রশ্নের উত্তর দিতে বলে মনে হচ্ছে।
লোও লাম

আপনি যদি টাইমস্ট্যাম্পগুলি পরীক্ষা করেন, ড্যানের মন্তব্যের 2 ঘন্টা পরে উত্তরটি সম্পাদিত হয়েছিল। এটি সত্যই গুরুত্বপূর্ণ নয়, তবে আমি এটি বিব্রতকর অবস্থায় পেয়েছি যে লিওর মন্তব্যটি আপত্তি পেয়েছে তাই আমি ভেবেছিলাম আমি এটি উল্লেখ করব।
বিল টারবেল

40

$location.search()ভেরিয়েবল হিসাবে কীগুলি এবং এর মান হিসাবে মানগুলি অন্তর্ভুক্ত করে একটি বস্তু প্রদান করে। সুতরাং: আপনি যদি আপনার কোয়েরি স্ট্রিংটি এভাবে লিখেন:

?user=test_user_bLzgB

আপনি সহজেই পাঠ্যটি পেতে পারেন:

$location.search().user

আপনি যদি কোনও কী ব্যবহার না করতে চান তবে মান যেমন foo = বার ব্যবহার করতে চান তবে আমি পরামর্শ দিচ্ছি যে একটি # হ্যাশ # টেষ্ট_উজার_বিএলজেজিবি,

এবং কলিং

$location.hash()

'test_user_bLzgB' ফিরে আসবে যা আপনি পুনরুদ্ধার করতে চান এমন ডেটা।

অতিরিক্ত তথ্য:

যদি আপনি ক্যোয়ারী স্ট্রিং পদ্ধতিটি ব্যবহার করেন এবং আপনি $ লোকেশন.সার্চ () দিয়ে একটি খালি অবজেক্ট পেয়ে থাকেন তবে এটি সম্ভবত এটিউগুলার এইচটিএমএল 5 এর পরিবর্তে হ্যাশব্যাং কৌশল ব্যবহার করছে ... এটির কাজটি পেতে, আপনার এই কনফিগারেশনে যুক্ত করুন মডিউল

yourModule.config(['$locationProvider', function($locationProvider){
    $locationProvider.html5Mode(true);    
}]);

13

ক্যোরি স্ট্রিংটি আমার জন্য কাজ করে এমন #? Q = স্ট্রিংটি ব্যবহারের জন্য প্রথমে URL ফর্ম্যাটটি সঠিক করুন

http://localhost/codeschool/index.php#?foo=abcd

ইনজেকশন - নিয়ামক মধ্যে অবস্থান পরিষেবা

app.controller('MyController', [ '$location', function($location) { 

    var searchObject = $location.search();

    // $location.search(); reutrn object 
    // searchObject = { foo = 'abcd' };

    alert( searchObject.foo );

} ]);

সুতরাং আউট পুটটি abcd করা উচিত


10

আপনি এটি ব্যবহার করতে পারেন

function getParameterByName(name) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
    return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

var queryValue = getParameterByName('test_user_bLzgB');

4
আপনি অন্য এসএফ উত্তর থেকে সেই ফাংশনটি অনুলিপি করেছেন ... আপনার উত্সটি উল্লেখ করার পক্ষে সেরা।
আর্সেল্ডন

হাঁ এই, আমি কি ব্যবহার হয় তাই কোথাও থেকে এটা পেয়েছিলাম
nuander

10

যদি আপনি $location.search()কাজ না করে থাকেন তবে নিশ্চিত হয়ে নিন যে আপনার নিম্নলিখিতগুলি রয়েছে:

1) html5Mode(true)অ্যাপ্লিকেশনটির মডিউল কনফিগার করা হয়েছে

appModule.config(['$locationProvider', function($locationProvider) {
   $locationProvider.html5Mode(true);
}]);

2) <base href="https://stackoverflow.com/">আপনার এইচটিএমএলে উপস্থিত রয়েছে

<head>
  <base href="/">
  ...
</head>

তথ্যসূত্র:

  1. বেস href = "/"
  2. html5Mode

"এইচটিএমএল 5 মডেল (সত্য) অ্যাপ্লিকেশনটির মডিউল কনফিগার করা হয়েছে" - ব্যাখ্যা করুন
15ee8f99-57ff-4f92-890c-b56153

@ এডপ্লুনকেট - দুঃখিত, আমি বলতে চাইছিলাম এটি একটি কৌণিক অ্যাপ্লিকেশন অবজেক্টের কনফিগার পদ্ধতিতে কনফিগার করা আছে। উদাহরণস্বরূপ এটি এখানে: var appModule = কৌণিক.মডিউল ('মাইএপমডিউল', []);
মহেশ

ধন্যবাদ, আমি কৌণিক থেকে বেশ নতুন
15ee8f99-57ff-4f92-890c-b56153

হ্যাঁ, এটি এত গুরুত্বপূর্ণ, একই সমস্যার মুখোমুখি হয়েছিল
বাহাদির তাসদেমির

7

কৌণিক এই ধরণের কোয়েরি স্ট্রিং সমর্থন করে না।

ইউআরএলটির ক্যোয়ারী অংশটি &মূল-মান জোড়াগুলির একটি পৃথক ক্রম হিসাবে অনুমিত হয় , সুতরাং এটি কোনও বিষয় হিসাবে পুরোপুরি ব্যাখ্যাযোগ্য interpret

কী-স্ট্রিংগুলি পরিচালনা করতে কোনও এপিআই নেই যা কী-মান জোড়ার সেটগুলি উপস্থাপন করে না।


0

আমার নোডজেএস উদাহরণে, আমার কাছে একটি url আছে "লোকালহোস্ট: 8080 / তালিকাগুলি / তালিকা 1 html? X1 = y" যা আমি মানগুলি অতিক্রম করতে এবং অর্জন করতে চাই।

X1 = y পাওয়ার জন্য $ লোকেশন.সন্ধান () এর সাথে কাজ করার জন্য, আমি কয়েকটি কাজ করেছি

  1. কৌনিক-রুট.জেজে স্ক্রিপ্ট উত্স
  2. আপনার অ্যাপ্লিকেশন মডিউলটির নির্ভরতাগুলির মধ্যে 'এনজিরাউট' ইনজেক্ট করুন
  3. আপনার অবস্থানপ্রভাইডারটি কনফিগার করুন
  4. $ লোকেশনের জন্য বেস ট্যাগ যুক্ত করুন (যদি আপনি না করেন তবে আপনার অনুসন্ধান () না। X1 কিছুই ফিরিয়ে আনবে না বা পূর্বনির্ধারিত হবে Or আপনার .html প্রয়োজন। আপনার ফাইলের অবস্থানগুলি পরীক্ষা করতে সর্বদা পৃষ্ঠার দেখার উত্সটি খুলুন!)
  5. অবস্থান পরিষেবা (অনুসন্ধান ()) প্রার্থনা

আমার তালিকা 1.js আছে

    var app = angular.module('NGApp', ['ngRoute']);  //dependencies : ngRoute
    app.config(function ($locationProvider) { //config your locationProvider
         $locationProvider.html5Mode(true).hashPrefix('');
    });

    app.controller('NGCtrl', function ($scope, datasvc, $location) {// inject your location service
        //var val = window.location.href.toString().split('=')[1];
        var val = $location.search().x1;    alert(val);
        $scope.xout = function () {
           datasvc.out(val)
           .then(function (data) {
              $scope.x1 = val;
              $scope.allMyStuffs = data.all;
           });
        };
        $scope.xout();
    });

এবং আমার তালিকা 1 এইচটিএমএল আছে

<head>
    <base href=".">
    </head>
<body ng-controller="NGCtrl">
<div>A<input ng-model="x1"/><br/><textarea ng-model="allMyStuffs"/></div>
<script src="../js/jquery-2.1.4.min.js"></script>
<script src="../js/jquery-ui.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-route.js"></script>
<script src="../js/bootstrap.min.js"></script>
<script src="../js/ui-bootstrap-tpls-0.14.3.min.js"></script>
<script src="list1.js"></script>
</body>

গাইড: https://code.angularjs.org/1.2.23/docs/guide/$location


0

আমার ফিক্স আরও সহজ, একটি কারখানা তৈরি করুন এবং এক পরিবর্তনশীল হিসাবে প্রয়োগ করুন। উদাহরণ স্বরূপ

angular.module('myApp', [])

// This a searchCustom factory. Copy the factory and implement in the controller
.factory("searchCustom", function($http,$log){    
    return {
        valuesParams : function(params){
            paramsResult = [];
            params = params.replace('(', '').replace(')','').split("&");
            
            for(x in params){
                paramsKeyTmp = params[x].split("=");
                
                // Si el parametro esta disponible anexamos al vector paramResult
                if (paramsKeyTmp[1] !== '' && paramsKeyTmp[1] !== ' ' && 
                    paramsKeyTmp[1] !== null){          
                    
                    paramsResult.push(params[x]);
                }
            }
            
            return paramsResult;
        }
    }
})

.controller("SearchController", function($scope, $http,$routeParams,$log,searchCustom){
    $ctrl = this;
    
    var valueParams = searchCustom.valuesParams($routeParams.value);
    valueParams = valueParams.join('&');

    $http({
        method : "GET",
        url: webservice+"q?"+valueParams
    }).then( function successCallback(response){
        data = response.data;
        $scope.cantEncontrados = data.length; 
        $scope.dataSearch = data;
        
    } , function errorCallback(response){
        console.log(response.statusText);
    })
      
})
<html>
<head>
</head>
<body ng-app="myApp">
<div ng-controller="SearchController">
<form action="#" >
                          
                            
                            <input ng-model="param1" 
                                   placeholder="param1" />
                            
                            <input  ng-model="param2" 
                                    placeholder="param2"/>
                        
<!-- Implement in the html code 
(param1={{param1}}&param2={{param2}}) -> this is a one variable, the factory searchCustom split and restructure in the array params
-->          
                        <a href="#seach/(param1={{param1}}&param2={{param2}})">
                            <buttom ng-click="searchData()" >Busqueda</buttom>
                        </a>
                    </form> 
</div>
</body>

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.