Javascript AngularJS:如何通过ng href将多个参数传递给控制器?
我有一个包含编辑按钮的表来更新记录。当我将singleJavascript AngularJS:如何通过ng href将多个参数传递给控制器?,javascript,angularjs,mean-stack,Javascript,Angularjs,Mean Stack,我有一个包含编辑按钮的表来更新记录。当我将singleid传递给ng href时,它的工作状态和打开表单页面: 例如:在我的index.html表格中 <a class="btn btn-warning" ng-href="#/provider/{{row._id}}">Edit</a> 它不工作,并重定向到主页 这是我的控制器: $timeout(function () { if ($routeParams.id !== undefined)
id
传递给ng href
时,它的工作状态和打开表单页面:
例如:在我的index.html
表格中
<a class="btn btn-warning" ng-href="#/provider/{{row._id}}">Edit</a>
它不工作,并重定向到主页
这是我的控制器:
$timeout(function () {
if ($routeParams.id !== undefined) {
$http.get('/providerlist/'+$routeParams.id, {
params:{
id:$routeParams.id,
collectionName:$routeParams.collectionName
}
}).success(function (response) {
alert(response);
$scope.providerList = response;
$scope.id = response['_id'];
});
}
});
app.js
用于路由:
var ProviderApp = angular.module('ProviderApp', ['ngRoute'])
.config(['$routeProvider', function ($routeProvider) {
$routeProvider
.when('/home', {
templateUrl: 'templates/home/index.html',
controller: 'HomeController',
controllerAs: 'home'
})
.when('/provider', {
templateUrl: 'templates/provider/index.html',
controller: 'ProviderController',
controllerAs: 'provider'
})
.when('/provider/:id', {
templateUrl: 'templates/provider/form.html',
controller: 'ProviderController',
controllerAs: 'provider'
})
.otherwise({
redirectTo: '/home'
});
}]);
这里我想做的就是在点击edit
按钮后,它应该重定向到form.html
,参数/数据为id
和collectionName
任何帮助都将不胜感激。如果您想在
ng href
中使用多个参数,还应在app.js
中更新您的路线url
当您在ng href
中使用多个参数,但没有与此路由匹配的路由时,则起作用,否则
路由重定向到主页
你可以试试
在html中:
<a class="btn btn-warning" ng-href="#/provider/{{row._id}}/collectionName/{{collectionName}}">Edit</a>
在控制器中,需要进行如下更改:
$http.get('/providerlist/'+$routeParams.id +'/collectionName/'+ $routeParams.cName)
.success(function (response) {
alert(response);
$scope.providerList = response;
$scope.id = response['_id'];
});
因此,服务器端路由应该是这样的:
/providerlist/:id/collectionName/:cName
ngRoute路径中的路径可以包含以冒号开头,以星形结尾的命名组,如:name*,当路由匹配时,所有字符都急切地存储在给定名称下的$routeParams
例如,路径如下:/color/:color/largecode/:largecode*/edit
对于此示例URL:/color/brown/largecode/code/with/slashes/edit
和摘录:
颜色:棕色
大代码:代码/带/斜杠
因此,在您的情况下,路线将是
.when('/provider/:id*\/collectionName/:collectionName*\', {
templateUrl: 'templates/provider/form.html',
controller: 'ProviderController',
controllerAs: 'provider'
})
这将确保即使结果href链接中有特殊字符和正斜杠,也会将您重定向到正确的控制器和页面…您需要将“/provider/:id”…更改为类似于…“/provider/:id/collection/:collectionName”的内容,然后在控制器中使用这些参数。。。使用$routeParams…@damitj07:我尝试了
。当('/provider/:id/collection/:collectionName',{templateUrl:'templates/provider/form.html',controller:'ProviderController',controllerAs:'provider'})时,
但它不起作用,我想这是因为你有两个roue/provider/。。。同名…@damitj07:Yes。。但两者都不同。第二个参数是参数,第一个参数不是是,但我认为,因为您正在映射多条路线。。到同一控制器函数..参数处理中可能存在问题。。你可以试着修改其中一个,然后检查它是否工作…写得和这个一模一样,但它不工作。。在这之后我应该在控制器上写些什么?哦,太好了。。这就是我错过的。。更新了我的代码及其工作状态。。谢谢shaishab。。!!!
$http.get('/providerlist/'+$routeParams.id +'/collectionName/'+ $routeParams.cName)
.success(function (response) {
alert(response);
$scope.providerList = response;
$scope.id = response['_id'];
});
.when('/provider/:id*\/collectionName/:collectionName*\', {
templateUrl: 'templates/provider/form.html',
controller: 'ProviderController',
controllerAs: 'provider'
})