AngularJS: получать значения строки запроса без хеша в ссылке

Я пытаюсь получить значения строки запроса с помощью angularjs.

мой URL: http://localhost/example.php?sportsId=3

когда я применил var goto = $location.search()['sportsId']; он возвращает меня undefined.

Однако, если я добавлю хеш в url, например Url: http://localhost/example.php#?sportsId=3

то он возвращает мне правильное значение 3.

Но в этом случае он также дает мне 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

Кроме того, мой default $_REQUEST['sportsId'] не работает с хэш-форматом.

Как я могу правильно получить значения из строки запроса с помощью angularjs?

Solutions Collecting From Web of "AngularJS: получать значения строки запроса без хеша в ссылке"

Я знаю, что это не угловая, а чистая JS и работает как шарм (просто не добавляйте dummyPath, и он получит 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; } 

Применение:

 var sportdsId = getUrlParameter('sportsId'); 

См. Ниже ссылки

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

Получение значений из строки запроса в URL-адресе с использованием местоположения AngularJS $

Вы должны использовать

 $location.search() 

Это возвращает объект с вашими параметрами, поэтому скажем, что у вас есть url? Param1 = val & param2 = val2

Это даст следующий ответ

 { param1 : val, param2 : val2 } 

Также убедитесь, что вы включили

 $locationProvider.html5Mode(true); 

Создайте свой объект поиска из свойства $window.location.search используя следующее:

  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; 

или создать фабрику queryString которую вы можете использовать где угодно. Это объединяет левую и правую части queryString. Т.е. перед # и после #

 (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 }; } }()); 

Применение:

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

Три простых шага сделали Job:

  1. Конфигурируйте угловой режим HTML5, добавив следующий код к контроллеру / службе:

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

  2. Добавьте базовый элемент в свой HTML:

 <base href="/"> 

Это то, что я использую. Он по существу совпадает с принятым ответом, но возвращает все параметры в качестве объекта и обрабатывает декодирование компонентов URL.

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