Я использую angular в приложении, которое представляет собой, в основном, таблицу с результатами поиска.
Доступ к этой таблице может быть достигнут с помощью URL-адреса, например http://myapp/?client=clientName
Для таблицы создается экземпляр angular для таблицы, среди прочего, для открытия модального диалога (также angular на основе bootstrap-ui) с деталями строки.
Эти сведения о строках приводятся через службу, которая имеет некоторые общие функции для обоих контроллеров: одну для таблицы и одну для модальной.
Теперь, в этой службе, у меня есть следующий фрагмент для извлечения:
service.fetchRelatedElements = function(element, cb) {
var url = '/search.json?results=20&type='+element.type;
if ($location.search()['client']) {
url += '&client=' + $location.search('client');
}
return doFetch(url, cb); // actual server json GET
};
Цель состоит в том, чтобы знать, есть ли в таблице уже этот специальный параметр client
как фильтр.
Если я положил точку останова в начале этого вызова, я вижу, что $location.absUrl()
возвращает текущий URL-адрес браузера (который, в моем случае, имеет параметр client
, который меня интересует).
Но $location.search()
возвращает пустой объект.
Я ввожу службу $location в свою службу с настройками по умолчанию (то есть не настраивая ее при вызове .config()
).
И, как говорит доктор,
Служба $location анализирует URL-адрес в адресной строке браузера (на основе на window.location) и делает URL доступным для вашего приложение.
Я что-то упустил? Не следует ли анализировать URL-адрес на этом этапе?
Спасибо!
ОБНОВЛЕНИЕ: Мне удалось заставить его работать. Проблема заключалась в том, что я не настраивал сервис. Я сделал это, потому что предположил, что таким образом он будет принимать по умолчанию, но кажется, что это не так, как это работает.