使用$ route获取URL参数

时间:2014-05-02 11:18:57

标签: javascript angularjs

我有以下网址:

http://myurl.dev/users/32

我想将最后一个参数32传递给$http.get request,但我无法弄清楚如何传递它。

到目前为止,我有这个:

var matchmaker = angular.module('matchmaker', ['ngRoute'], function($interpolateProvider) {
    $interpolateProvider.startSymbol('[[');
    $interpolateProvider.endSymbol(']]');
})
.controller('LocationCtrl', ['$scope', '$http', '$location', '$routeParams', '$route', function($scope, $http, $location, $routeParams, $route) {

    var id = $route.current.params.id;

    console.log(id);

    $http.get('http://myurl.dev/services/' + id ).success(function(data) 
    {
        $scope.applicants = data;
    });

}]);

在控制台中它说:

  

无法读取未定义的属性'params'

有人可以告诉我,我做错了吗?

修改

Angular没有生成url,它是服务器端生成的url

编辑2.0

这是具有实际路由参数的routeProvider的配置:

var matchmaker = angular.module('matchmaker', ['ngRoute'], function($interpolateProvider) {
$interpolateProvider.startSymbol('[[');
$interpolateProvider.endSymbol(']]');
})
.config(function($routeProvider, $locationProvider) {
  $routeProvider.when('/matchmaker/locations/:id', {
    controller: 'LocationCtrl'
  });
  $locationProvider.html5Mode(true);
});

2 个答案:

答案 0 :(得分:0)

console.log($routeParams);放入控制器并检查其值。

如果是Object {},请使用参数检查您是否有路线定义:

var module = angular.module('ngRouteExample', ['ngRoute']);

module.config(function($routeProvider, $locationProvider) {
  $routeProvider.when('/test/:id', {
    templateUrl: 'test.html',
    controller: 'TestController'
  });

  // configure html5 to get links working on jsfiddle
  $locationProvider.html5Mode(true);
});

如果是这样,您将在控制台中获得此输出:

Object {id: "42"} 

答案 1 :(得分:0)

这是因为你试图获得当时不存在的价值,这就是javascript的工作方式。您需要在准备好使用' $routeChangeSuccess'时指定您想要这些值。事件。

.controller('PagesCtrl', function ($rootScope, $scope, $routeParams, $route) {
    //If you want to use URL attributes before the website is loaded
    $rootScope.$on('$routeChangeSuccess', function () {
        //You can use your url params here
        $http.get('http://myurl.dev/services/' + $routeParams.id )
        .success(function(data) {
            $scope.applicants = data;
        });
    });
});