Я хотів би прочитати значення параметрів 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)як його викликали в сучасному браузері.