如何在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