Подтвердить что ты не робот

Angular 1 - получить текущие параметры URL

Я хочу извлечь данные из текущего URL-адреса и использовать его в контроллере. Например, у меня есть этот url:

app.dev/backend/surveys/2

Биты, которые я хочу извлечь:

app.dev/backend/: type/: id

Есть ли что-нибудь в Angular, которое могло бы помочь мне с этой задачей?

4b9b3361

Ответ 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;
  }
});