Я хотів би прочитати значення параметрів URL-запиту за допомогою AngularJS. Я отримую доступ до HTML із такою URL-адресою:
http://127.0.0.1:8080/test.html?target=bob
Як і очікувалося, location.search
є "?target=bob"
. Для доступу до значення target я знайшов різні приклади, перелічені в Інтернеті, але жоден з них не працює в AngularJS 1.0.0rc10. Зокрема, такі undefined
:
$location.search.target
$location.search['target']
$location.search()['target']
Хтось знає, що буде працювати? (Я використовую $location
як параметр для свого контролера)
Оновлення:
Я розмістив рішення нижче, але не повністю задоволений ним. Документація в Посібнику розробника: Кутові послуги: Використання $ location визначає наступне про $location
:
Коли я повинен використовувати $ location?
Кожен раз, коли вашій програмі потрібно буде реагувати на зміну поточної URL-адреси або якщо ви хочете змінити поточну URL-адресу в браузері.
Для мого сценарію мою сторінку буде відкрито із зовнішньої веб-сторінки з параметром запиту, тому я сам по собі не реагую на зміну поточної URL-адреси. Тож, можливо, $location
це не правильний інструмент для роботи (про некрасиві деталі див. Мою відповідь нижче). Тому я змінив назву цього питання на "Як читати параметри запиту в AngularJS за допомогою $ location?" до "Який найкоротший спосіб зчитувати параметри запиту в AngularJS?". Очевидно, що я міг просто використовувати javascript і регулярне вираження для розбору location.search
, але перехід цього низького рівня на щось настільки базове дійсно ображає мої функції програміста.
Отже: чи є кращий спосіб використання, $location
ніж я, у своїй відповіді, або є лаконічне чергування?
http://127.0.0.1:8080/test.html#?target=bob
буде працювати, помітити #
раніше ?
. $location
це метод маршрутизації другого рівня, який не надсилається на сервер.
$location.search()['target']
працює після того, $locationProvider.html5Mode(true)
як його викликали в сучасному браузері.