Angular 1 - get current URL parameters

前端 未结 6 1213
情话喂你
情话喂你 2020-11-30 03:37

I want to extract data from current URL and use it in controller. For example I have this url:

app.dev/backend/surveys/2

Bits t

相关标签:
6条回答
  • 2020-11-30 04:16

    Better would have been generate url like

    app.dev/backend?type=surveys&id=2
    

    and then use

    var type=$location.search().type;
    var id=$location.search().id;
    

    and inject $location in controller.

    0 讨论(0)
  • 2020-11-30 04:24

    To get parameters from URL with ngRoute . It means that you will need to include angular-route.js in your application as a dependency. More information how to do this on official ngRoute documentation.

    The solution for the question:

    // 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);
        });
    

    If you don't enable the $locationProvider.html5Mode(true);. Urls will use hashbang(/#/).

    More information about routing can be found on official angular $route API documentation.


    Side note: This question is answering how to achieve this using ng-Route however I would recommend using the ui-Router for routing. It is more flexible, offers more functionality, the documentations is great and it is considered the best routing library for angular.

    0 讨论(0)
  • 2020-11-30 04:26

    ex: url/:id

    var sample= app.controller('sample', function ($scope, $routeParams) {
      $scope.init = function () {
        var qa_id = $routeParams.qa_id;
      }
    });
    
    0 讨论(0)
  • 2020-11-30 04:29

    In your route configuration you typically define a route like,

    .when('somewhere/:param1/:param2')
    

    You can then either get the route in the resolve object by using $route.current.params or in a controller, $routeParams. In either case the parameters is extracted using the mapping of the route, so param1 can be accessed by $routeParams.param1 in the controller.

    Edit: Also note that the mapping has to be exact

    /some/folder/:param1
    

    Will only match a single parameter.

    /some/folder/:param1/:param2 
    

    Will only match two parameters.

    This is a bit different then most dynamic server side routes. For example NodeJS (Express) route mapping where you can supply only a single route with X number of parameters.

    0 讨论(0)
  • 2020-11-30 04:37

    Just inject the routeParams service:

    http://docs.angularjs.org/api/ngRoute.$routeParams

    0 讨论(0)
  • 2020-11-30 04:38

    You could inject $routeParams to your controller and access all the params that where used when the route was resolved.

    E.g.:

    // route was: app.dev/backend/:type/:id
    
    function MyCtrl($scope, $routeParams, $log) {
        // use the params
        $log.info($routeParams.type, $routeParams.id);
    };
    

    See angular $routeParams documentation for further information.

    0 讨论(0)
提交回复
热议问题