14

I am trying to get query string values using angularjs.

my Url: http://localhost/example.php?sportsId=3

when I applied var goto = $location.search()['sportsId']; it returns me undefined.

However, if I add hash in url like Url: http://localhost/example.php#?sportsId=3

then it returns me correct value 3.

But in this case, it also gives me Error: [$parse:syntax] http://errors.angularjs.org/1.3.8/$parse/syntax?p0=undefined&p1=not%20a%20primary%20expression&p2=null&p3=sportsID%3D&p4=sportsID%3D

Also, my default $_REQUEST['sportsId'] is not working with hash format.

How can I correctly get values from query string by using angularjs?

1

6 Answers 6

27

I know this is not Angular but its pure JS and works like a charm (just don't add dummyPath and it will take the URL).

function getUrlParameter(param, dummyPath) {
        var sPageURL = dummyPath || window.location.search.substring(1),
            sURLVariables = sPageURL.split(/[&||?]/),
            res;

        for (var i = 0; i < sURLVariables.length; i += 1) {
            var paramName = sURLVariables[i],
                sParameterName = (paramName || '').split('=');

            if (sParameterName[0] === param) {
                res = sParameterName[1];
            }
        }

        return res;
}

Usage:

var sportdsId = getUrlParameter('sportsId');
Sign up to request clarification or add additional context in comments.

1 Comment

Nice. Just need to decode the string: res = decodeURIComponent(sParameterName[1].replace(/\+/g, " "));
4

Three simple steps did the Job:

  1. Config angular for HTML5 mode by adding the following code to your controller/service:

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

  2. Add base element to your HTML:

<base href="/">

  1. Inject "$location" into your angular controller:

    app.controller('ABCController', ['$scope', '$location', ABCController]);

Finally to get the query string use the following code:

var yourId = $location.search().yourId;

The answer is already there in previous answers, I just summarized for better understanding. Hopefully somebody will become beneficial from it.

Comments

2

Please refer below links

var goto = $location.search().sportsId;

Getting values from query string in an url using AngularJS $location

2 Comments

var goto = $location.search().sportsId; doesn't work. returns me undefined
This answer requires you to adjust your $locationProvider as well which may not work in all instances.
2

This is what I use. It's essentially the same as the accepted answer but returns all parameters as an object and handle decoding of url components.

function getUrlParameters() {
    var pairs = window.location.search.substring(1).split(/[&?]/);
    var res = {}, i, pair;
    for (i = 0; i < pairs.length; i++) {
        pair = pairs[i].split('=');
        if (pair[1])
            res[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
    }
    return res;
}

Comments

1

You need to use

$location.search()

This returns an object with your params so lets say you have url?param1=val&param2=val2

This will give the following back

{ param1 : val, param2 : val2 }

Also make sure you enable

$locationProvider.html5Mode(true);  

Comments

1

Create your self a search object from the the $window.location.search property using the following:

    var search = $window.location.search
            .split(/[&||?]/)
            .filter(function (x) { return x.indexOf("=") > -1; })
            .map(function (x) { return x.split(/=/); })
            .map(function (x) {
                x[1] = x[1].replace(/\+/g, " ");
                return x;
            })
            .reduce(function (acc, current) {
                acc[current[0]] = current[1];
                return acc;
            }, {});

    var sportsId = search.sportsId;

or create a queryString factory which you can use anywhere.. This combines the left and right parts of the queryString.. I.e. before # and after the #

(function () {
    "use strict";

    angular
        .module("myModuleName")
        .factory("queryString", QueryStringFactory);

    function QueryStringFactory($window, $location) {

        function search() {

            var left = $window.location.search
                .split(/[&||?]/)
                .filter(function (x) { return x.indexOf("=") > -1; })
                .map(function (x) { return x.split(/=/); })
                .map(function (x) {
                    x[1] = x[1].replace(/\+/g, " ");
                    return x;
                })
                .reduce(function (acc, current) {
                    acc[current[0]] = current[1];
                    return acc;
                }, {});

            var right = $location.search() || {};

            var leftAndRight = Object.keys(right)
                .reduce(function(acc, current) {
                    acc[current] = right[current];
                    return acc;
                }, left);

            return leftAndRight;
        }

        return {
            search: search
        };

    }

}());

usage:

var qs = queryString.search();
var sportsId = sq.sportsId;

1 Comment

I don't know, but it looks too much code for a simple op.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.