AngularJS: получать значения строки запроса без хеша в ссылке
Я пытаюсь получить значения строки запроса с помощью angularjs.
мой адрес: 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?
Ответы
Ответ 1
Я знаю, что это не Angular, а его чистый 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');
Ответ 2
См. ниже ссылки
var goto = $location.search().sportsId;
Получение значений из строки запроса в URL-адресе с использованием местоположения AngularJS $
Ответ 3
Вам нужно использовать
$location.search()
Это возвращает объект с вашими параметрами, поэтому давайте скажем, что у вас есть
URL param1 = значение &? param2 = val2
Это даст следующую информацию
{ param1 : val, param2 : val2 }
Также убедитесь, что вы включили
$locationProvider.html5Mode(true);
Ответ 4
Создайте свой объект поиска из свойства $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
factory, который вы можете использовать где угодно. Это объединяет левую и правую части queryString.. I.e. до #
и после #
(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;
Ответ 5
Три простых шага выполнили задание:
-
Конфигурация angular для режима HTML5, добавив следующий код к контроллеру/службе:
app.config(['$ locationProvider', function ($ locationProvider) { $ LocationProvider.html5Mode (истина);
}]);
-
Добавить базовый элемент в ваш HTML:
<base href="/">
Ответ 6
Это то, что я использую. Он по существу тот же, что и принятый ответ, но возвращает все параметры в качестве объекта и обрабатывает декодирование компонентов 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;
}