如何在Angular JS中的routeProvider中传递参数?

我在Angular JS中使用routeProvider:

.when('/profile/personal', {
       templateUrl: 'personal.html',
       controller: 'EditProfileController'
})

我如何将param传递给控制器EditProfileController并在这里调用返回数据的Ajax方法。 这些数据必须在personal.html的路由模板中显示。

例:

    .controller('EditProfileController', ['$scope', '$http', function ($scope, $http) {
         // If was click on `/profile/personal` from route, must get patam `personal` and call method GetAjax(param);
         $scope.GetAjax = function (param){
            //here return data put it in template HTML from route
         }  

    }]);

我的链接位于页面路径中:

http://wd.tk/profile

当我点击链接路线时,我得到的网址是:

http://wd.tk/profile#/profile/personal/1

我会做:

.controller('EditProfileController', ['$scope', '$http', function ($scope, $http, $routeParams) {
   console.log($routeParams);
}]);

我收到错误:

TypeError: Cannot read property 'idProfile' of undefined

首先,在你的url配置中,你必须把url的参数:

when('/profile/personal/:idProfile', {
       templateUrl: 'personal.html',
       controller: 'EditProfileController'
})

现在,在您的EditProfileController中,您应该获取参数并调用ajax请求:

注入$ routeParams对象并获取参数

$routeParams.idProfile:

.controller('EditProfileController',  
function ($scope, $http, $routeParams) {

   var idProfile = $routeParams.idProfile;

   $http.get("service url").then(setData, setError);

   function setData(data) {
       $scope.data = data;
   }
   function setError() {
       alert("error on get data profile");
   }

}]);

在你的html中,你将以正确的格式显示你的数据配置文件。

但我建议所有的ajax调用应该在角度服务中进行分组。 PD:检查它出来角ui路由器:

angular-route和angular-ui-router有什么区别?

希望这可以帮助。


您需要更改$ routeProvider,它应该具有/profile/:type而不是/profile/personal ,这意味着您将为以下:type提供值:type可以通过插入控制器内的$routeParams服务来访问。

.when('/profile/:type', {
       templateUrl: 'personal.html',
       controller: 'EditProfileController'
})

调节器

.controller('EditProfileController', ['$scope', '$http', '$routeParams', function ($scope, $http, $routeParams) {
     $scope.profileType = $routeParams.type;
     $scope.GetAjax = function (){
        //here you have profile type in $scope.profileType
        //you can pass it to ajax by simply accessing scope variable.
        $http.get('/getprofiledata?type='+ $scope.profileType)
        .success(function(data){
           $scope.profileData = data;
        })
        .error(function(error){
           console.log('error occured')
        })
     }  
     $scope.GetAjax(); //calling it on controller init
}]);

更新

YOu错过了数组注释中的依赖项$routeParams之一。

.controller('EditProfileController', ['$scope', '$http', '$routeParams',function ($scope, $http, $routeParams) {
   console.log($routeParams);
}]);
链接地址: http://www.djcxy.com/p/77969.html

上一篇: How to pass param in routeProvider in Angular JS?

下一篇: ui router vs ngroute for sinlge page app