Angular 1 - получить текущие параметры URL
Я хочу извлечь данные из текущего URL-адреса и использовать его в контроллере.
Например, у меня есть этот url:
app.dev/backend/surveys/2
Биты, которые я хочу извлечь:
app.dev/backend/: type/: id
Есть ли что-нибудь в Angular, которое могло бы помочь мне с этой задачей?
Ответы
Ответ 1
Получить параметры из URL с помощью ngRoute
. Это означает, что вам нужно будет включить angular -route.js в ваше приложение как зависимость. Подробнее о том, как это сделать на официальной документации ngRoute.
Решение вопроса:
// You need to add 'ngRoute' as a dependency in your app
angular.module('ngApp', ['ngRoute'])
.config(function ($routeProvider, $locationProvider) {
// configure the routing rules here
$routeProvider.when('/backend/:type/:id', {
controller: 'PagesCtrl'
});
// enable HTML5mode to disable hashbang urls
$locationProvider.html5Mode(true);
})
.controller('PagesCtrl', function ($routeParams) {
console.log($routeParams.id, $routeParams.type);
});
Если вы не включили $locationProvider.html5Mode(true);
. Urls будет использовать hashbang (/#/
).
Более подробную информацию о маршрутизации можно найти в официальной документации angular $route.
Примечание: Этот вопрос отвечает, как это сделать, используя ng-Route, однако я бы рекомендовал использовать ui -Router для маршрутизации. Он более гибкий, предлагает больше функциональности, документация отличная и считается лучшей библиотекой маршрутизации для angular.
Ответ 2
Вы можете ввести $routeParams
в свой контроллер и получить доступ ко всем параметрам, которые были использованы при разрешении маршрута.
например:.
// route was: app.dev/backend/:type/:id
function MyCtrl($scope, $routeParams, $log) {
// use the params
$log.info($routeParams.type, $routeParams.id);
};
Дополнительную информацию см. в документации angular $routeParams.
Ответ 3
Лучше было бы генерировать url как
app.dev/backend?type=surveys&id=2
а затем используйте
var type=$location.search().type;
var id=$location.search().id;
и введите $location в контроллер.
Ответ 4
В вашей конфигурации маршрута вы обычно определяете маршрут, например,
.when('somewhere/:param1/:param2')
Затем вы можете либо получить маршрут в объекте разрешения, используя $route.current.params
или в контроллере $routeParams
. В любом случае параметры извлекаются с использованием сопоставления маршрута, поэтому к param1
можно получить доступ к $routeParams.param1
в контроллере.
Изменить. Также обратите внимание, что отображение должно быть точным
/some/folder/:param1
Будет соответствовать только одному параметру.
/some/folder/:param1/:param2
Будет соответствовать только два параметра.
Это немного отличается от большинства динамических маршрутов на стороне сервера. Например, сопоставление маршрутов NodeJS (Express), где вы можете предоставить только один маршрут с X числом параметров.
Ответ 5
например:
URL/: идентификатор
var sample= app.controller('sample', function ($scope, $routeParams) {
$scope.init = function () {
var qa_id = $routeParams.qa_id;
}
});
Ответ 6
Просто введите команду routeParams:
http://docs.angularjs.org/api/ngRoute.$routeParams